Yii Framework Forum: Invalid Multibyte Sequence In Argument - Yii Framework Forum

Jump to content

  • (2 Pages)
  • +
  • 1
  • 2
  • You cannot start a new topic
  • You cannot reply to this topic

Invalid Multibyte Sequence In Argument как это так? Rate Topic: -----

#1 User is offline   styleroom 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 359
  • Joined: 14-January 12
  • Location:Долгопрудный, Россия

Posted 05 November 2013 - 04:47 AM

всем привет

столкнулся с непоняткой: при использовании связки CArrayDataProvider + zii.widgets.CListView = получил такой отлуп = htmlspecialchars() [<a href='function.htmlspecialchars'>function.htmlspecialchars</a>]: Invalid multibyte sequence in argument

в массиве который подается в датапровайдер - кириллица
стоит ее поменять на латиницу - все работает без проблем

что за фигня? почему возникает и как лечить?

p.s. неужели массив энкодировать?! :o
p.s.2 таблица в БД - utf8
I'm sorry for my English...
0

#2 User is offline   ORey 

  • Elite Member
  • PipPipPipPipPip
  • Yii
  • Group: Members
  • Posts: 1,701
  • Joined: 20-April 09
  • Location:Moscow, Russia

Posted 05 November 2013 - 04:56 AM

Не, не надо ничего энкодировать.

Эта штука может появляться либо из-за косячных данных в БД, либо из-за косячной версии php (в 5.3.19 был такой баг, уже пофиксили)

Ну и на всякий случай проверьте, что в конфиге

'db' => array(
    ...
    'charset' => 'utf8',
),

God is real unless declared as integer
0

#3 User is offline   styleroom 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 359
  • Joined: 14-January 12
  • Location:Долгопрудный, Россия

Posted 05 November 2013 - 05:01 AM

View PostORey, on 05 November 2013 - 04:56 AM, said:

Ну и на всякий случай проверьте, что в конфиге

'db' => array(
    ...
    'charset' => 'utf8',
),

так и есть =
'charset' => 'utf8',


View PostORey, on 05 November 2013 - 04:56 AM, said:

Эта штука может появляться либо из-за косячных данных в БД, либо из-за косячной версии php (в 5.3.19 был такой баг, уже пофиксили)

менял массив из БД на рукопашный массив с кириллицей = та же ошибка = видимо дело в версии php
I'm sorry for my English...
0

#4 User is offline   ORey 

  • Elite Member
  • PipPipPipPipPip
  • Yii
  • Group: Members
  • Posts: 1,701
  • Joined: 20-April 09
  • Location:Moscow, Russia

Posted 05 November 2013 - 05:06 AM

Обновляйтесь... По идее, есть способ заткнуть фонтан красноречия php - вот так примерно
htmlspecialchars('текст текст текст', ENT_COMPAT, 'UTF-8');

но как бы не пришлось для этого править сорцы (что не есть гуд)
God is real unless declared as integer
0

#5 User is offline   styleroom 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 359
  • Joined: 14-January 12
  • Location:Долгопрудный, Россия

Posted 05 November 2013 - 05:36 AM

View PostORey, on 05 November 2013 - 05:06 AM, said:

Обновляйтесь...

а вот и не помогло...
обновился с 5.3.8 до 5.3.27 — та же ошибка

попробовал вместо CArrayDataProvider использовать CSqlDataProvider = все проканало без проблем...

как так могет быть?
I'm sorry for my English...
0

#6 User is offline   ineersa 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 284
  • Joined: 15-April 13
  • Location:Ukraine

Posted 05 November 2013 - 05:46 AM

View Poststyleroom, on 05 November 2013 - 05:36 AM, said:

а вот и не помогло...
обновился с 5.3.8 до 5.3.27 — та же ошибка

попробовал вместо CArrayDataProvider использовать CSqlDataProvider = все проканало без проблем...

как так могет быть?

Как сказал oRey - обновляйтесь, только на 5.4

htmlspecialchars('текст текст текст', ENT_COMPAT, 'UTF-8');

Именно это и нужно делать, в 5.4 3й параметр по дэфолту UTF-8, а вот в 5.3.27 он ISO-8859-1, вот и выдает вам ошибку.

Да и давно пора переходить уже, трэйты там, производительность и прочее. Кстати ради рекламы - после апдейта нагрузка на инстансах упала на 25% в среднем, так что стоит задуматься.
0

#7 User is offline   ORey 

  • Elite Member
  • PipPipPipPipPip
  • Yii
  • Group: Members
  • Posts: 1,701
  • Joined: 20-April 09
  • Location:Moscow, Russia

Posted 05 November 2013 - 05:50 AM

Переходить-то давно пора, да только с шаред-хостинг провайдерами беда.
Сейчас пока на локуме сижу, если знаете рекомендованных - дайте ссылок чтоль.
Список samdark-а видел.
God is real unless declared as integer
0

#8 User is offline   styleroom 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 359
  • Joined: 14-January 12
  • Location:Долгопрудный, Россия

Posted 05 November 2013 - 06:28 AM

дальше еще интереснее: решил попробовать использовать encodeArray из CHtml
для этого создал в компонентсах класс унаследованный от CHtml и там перегрузил этот метод
в котором использовал
htmlspecialchars($key,ENT_QUOTES|ENT_IGNORE,'UTF-8')

не помогло...

тогда пошел в рукопашную и вбил массив прямо в CArrayDataProvider и тут случилось крайне интересное...

так - работает =
        $dataProvider=new CArrayDataProvider(
                array(
                    'key'=>htmlspecialchars('it work = english words and letters', ENT_COMPAT, 'UTF-8')
                    ), array(
            'pagination'=>array(
                'pageSize'=>10,
            ),
        ));


так - не работает =
        $dataProvider=new CArrayDataProvider(
                array(
                    'key'=>htmlspecialchars('здесь текст на русском', ENT_COMPAT, 'UTF-8')
                    ), array(
            'pagination'=>array(
                'pageSize'=>10,
            ),
        ));


а так - СНОВА работает =
        $dataProvider=new CArrayDataProvider(
                array(
                    'key'=>htmlspecialchars('it isn`t work = здесь текст на русском', ENT_COMPAT, 'UTF-8')
                    ), array(
            'pagination'=>array(
                'pageSize'=>10,
            ),
        ));


не понимаю - каким образом наличие в строке нескольких латинских символов меняет принцип работы?
I'm sorry for my English...
0

#9 User is offline   andy_s 

  • Random Member Title
  • Yii
  • Group: Moderators
  • Posts: 1,526
  • Joined: 22-June 09
  • Location:Russia, Kostroma

Posted 05 November 2013 - 06:46 AM

Это может быть как-то связано с BOM? Иногда, если файлы проекта (или хотя бы один) находятся в кодировке utf8 (с BOM), то случаются странные вещи, по крайней мере, у меня :) Но это предположение из разряда "пальцем в небо".
0

#10 User is offline   styleroom 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 359
  • Joined: 14-January 12
  • Location:Долгопрудный, Россия

Posted 05 November 2013 - 06:54 AM

View Postandy_s, on 05 November 2013 - 06:46 AM, said:

Это может быть как-то связано с BOM? Иногда, если файлы проекта (или хотя бы один) находятся в кодировке utf8 (с BOM), то случаются странные вещи, по крайней мере, у меня :) Но это предположение из разряда "пальцем в небо".

хз... не могу прокомментировать...
обычно если есть БОМ - то так и вылезает предупреждение...

с другой стороны CSqlDataProvider работает без проблем = ему пофиг кириллица
а CArrayDataProvider = кобенится

и потом = я же врукопашную фигачу провайдеры прямо в контроллере = какой-тут может быть БОМ ?
вывод же в представлении
I'm sorry for my English...
0

#11 User is offline   ORey 

  • Elite Member
  • PipPipPipPipPip
  • Yii
  • Group: Members
  • Posts: 1,701
  • Joined: 20-April 09
  • Location:Moscow, Russia

Posted 05 November 2013 - 07:19 AM

Хмм.

Если убрать датапровайдеры и всё с ними связанное, и тупо попробовать

echo htmlspecialchars('it work = english words and letters', ENT_COMPAT, 'UTF-8');
echo htmlspecialchars('здесь текст на русском', ENT_COMPAT, 'UTF-8');
echo htmlspecialchars('it isn`t work = здесь текст на русском', ENT_COMPAT, 'UTF-8');

что получится?
God is real unless declared as integer
0

#12 User is offline   styleroom 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 359
  • Joined: 14-January 12
  • Location:Долгопрудный, Россия

Posted 05 November 2013 - 07:23 AM

View PostORey, on 05 November 2013 - 07:19 AM, said:

Хмм.

Если убрать датапровайдеры и всё с ними связанное, и тупо попробовать

echo htmlspecialchars('it work = english words and letters', ENT_COMPAT, 'UTF-8');
echo htmlspecialchars('здесь текст на русском', ENT_COMPAT, 'UTF-8');
echo htmlspecialchars('it isn`t work = здесь текст на русском', ENT_COMPAT, 'UTF-8');

что получится?

все работает без проблем и в любых вариациях = в браузер выводится
p.s. во блин замутил
I'm sorry for my English...
0

#13 User is offline   ORey 

  • Elite Member
  • PipPipPipPipPip
  • Yii
  • Group: Members
  • Posts: 1,701
  • Joined: 20-April 09
  • Location:Moscow, Russia

Posted 05 November 2013 - 07:29 AM

Ну стало быть с пхп всё ок, и надо копать датапровайдер в поисках места, где он там косячить начинает, а потом сабмитить багу, ибо крутая.

Важное примечание: эта фигня здорово зависит от error_reporting, так что следите, чтобы он там не был выключен.
God is real unless declared as integer
0

#14 User is offline   ineersa 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 284
  • Joined: 15-April 13
  • Location:Ukraine

Posted 05 November 2013 - 09:35 AM

А что выводит Yii::app()->charset?

Quote

Обновляйтесь... По идее, есть способ заткнуть фонтан красноречия php - вот так примерно
htmlspecialchars('текст текст текст', ENT_COMPAT, 'UTF-8');

но как бы не пришлось для этого править сорцы (что не есть гуд)


Ну encode выглядит вот так
public static function encode($text)
{
    return htmlspecialchars($text,ENT_QUOTES,Yii::app()->charset);
} 

Так что лезть не придется. Разве что для ENT_IGNORE.
$dataProvider=new CArrayDataProvider(
                array(
                    'key'=>htmlspecialchars('it isn`t work = здесь текст на русском', ENT_COMPAT, 'UTF-8')
                    ), array(
            'pagination'=>array(
                'pageSize'=>10,
            ),
        ));

А как вы собственно выводите это все?

Попробовал на 5.4 - все работает. Пробовал так:
$dataProvider=new CArrayDataProvider(
                array(
                    'key'=>' текст'
                    ), array(
            'pagination'=>false,
            'keyField'=>false
        ));
      echo $dataProvider->rawData['key'];


Код виджета с выводом в студию пожалуйста.
0

#15 User is offline   styleroom 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 359
  • Joined: 14-January 12
  • Location:Долгопрудный, Россия

Posted 06 November 2013 - 12:50 AM

View Postineersa, on 05 November 2013 - 09:35 AM, said:

А что выводит Yii::app()->charset?
выводит UTF-8

View Postineersa, on 05 November 2013 - 09:35 AM, said:

А как вы собственно выводите это все?
вывожу через zii.widgets.CListView который расположен в виде
соответственно у него есть itemView
вопрос: какая разница может быть для CListView между датапровайдером от CArrayDataProvider и от CSqlDataProvider?

View Postineersa, on 05 November 2013 - 09:35 AM, said:

Попробовал на 5.4 - все работает.
но у меня-то не 5.4, а 5.3.27

View Postineersa, on 05 November 2013 - 09:35 AM, said:

Код виджета с выводом в студию пожалуйста.

даже и незнаю что показать - ибо процесс еще тестируется И сейчас я уже отказался от CArrayDataProvider и перешел на CSqlDataProvider

вот что в виде =
$this->widget('zii.widgets.CListView', array(	
    'dataProvider'=>$dataProvider,	
    'itemView'=>'page_test_view',
));


вот что в itemView =
echo "<pre>";
print_r($data);
echo "</pre>";


ну и вот что в контроллере =
$count=count($rawData);
$dataProvider=new CSqlDataProvider($rawData, array(
	'keyField'=>'id_page',
	'totalItemCount'=>$count,
	'pagination'=>array(
		'pageSize'=>3,
	),
));                

$this->render('page_test',array(
	'datas'=>$this->data,
	'dataProvider'=>$dataProvider,
));

I'm sorry for my English...
0

#16 User is offline   ineersa 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 284
  • Joined: 15-April 13
  • Location:Ukraine

Posted 06 November 2013 - 01:01 AM

Просто думал что где то используется purifier, но нет. Переходите на 5.4 и будет счастье, тем более что давно уже пора.
0

#17 User is offline   styleroom 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 359
  • Joined: 14-January 12
  • Location:Долгопрудный, Россия

Posted 06 November 2013 - 01:10 AM

View Postineersa, on 06 November 2013 - 01:01 AM, said:

Просто думал что где то используется purifier, но нет. Переходите на 5.4 и будет счастье, тем более что давно уже пора.

yum update php смог обновить только до 5.3.27
а ковыряться со сторонними репозиториями - пока недосуг
может в отпуске...
I'm sorry for my English...
0

#18 User is offline   ineersa 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 284
  • Joined: 15-April 13
  • Location:Ukraine

Posted 06 November 2013 - 01:29 AM

Ага, там надо yum install, заодно и апач до 2.4, хотя и на 2.2 работает но нужно немного повозиться.
Конфиги придется немного поправить, и расширения лучше сразу ставить.
0

#19 User is offline   styleroom 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 359
  • Joined: 14-January 12
  • Location:Долгопрудный, Россия

Posted 06 November 2013 - 01:46 AM

View Postineersa, on 06 November 2013 - 01:29 AM, said:

Ага, там надо yum install, заодно и апач до 2.4, хотя и на 2.2 работает но нужно немного повозиться.
Конфиги придется немного поправить, и расширения лучше сразу ставить.

ё-кэ-лэ-мэ-нэ!
а песня-то = длинная... к новому php и апач надо новый или лезть в конфиги
p.s. все у этих программистов через задницу :)
I'm sorry for my English...
0

#20 User is offline   styleroom 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 359
  • Joined: 14-January 12
  • Location:Долгопрудный, Россия

Posted 06 November 2013 - 02:03 AM

View Postineersa, on 06 November 2013 - 01:29 AM, said:

Ага, там надо yum install, заодно и апач до 2.4, хотя и на 2.2 работает но нужно немного повозиться.
Конфиги придется немного поправить, и расширения лучше сразу ставить.

кстати — вы-то сами как обновляли?
I'm sorry for my English...
0

Share this topic:


  • (2 Pages)
  • +
  • 1
  • 2
  • You cannot start a new topic
  • You cannot reply to this topic

1 User(s) are reading this topic
0 members, 1 guests, 0 anonymous users