html_entity_decode() проблема с windows-1251 в PHP 5.3.2

lamerz

Новичок
html_entity_decode() проблема с windows-1251 в PHP 5.3.2

Здравствуйте....подскажите пожалуйста.... вот не могу понять... это фича, баг или у меня кривые руки?

В PHP 5.3.2 строка

PHP:
html_entity_decode( "Çàÿâêà", ENT_QUOTES, 'cp1251');
возвращает
PHP:
Çàÿâêà
а в PHP 5.2.13 возвращает(как следует и то что мне нужно) слово

PHP:
Заявка

Я юзаю 5.2 обычно....
Но так получилось, что у меня на дистрибутиве(на роботе) мой дист. меинтейнер выбрал версию 5.3 считая ее стабильной... Потому поставил уже ее....

Вот три дня угробил на то, как бы правильно перевести строку с одной кодировки в другую.... и в конце концов столкнулся с этой фигнея.... О_о
 

Вурдалак

Продвинутый новичок
dimagolov
Это по вине форума строка "Çàÿâêà" «превратилась» в "Çàÿâêà". Если ты намекаешь на то, что т.н. NCR и entity — вещи разные, то, IMHO, это не совсем правильный ответ.

Причина, как мне кажется, в том, что раньше было несоблюдение стандарта:
http://www.w3.org/International/tutorials/tutorial-char-enc/#Slide0430
A hexadecimal NCR. NCRs are a type of escape. All NCRs begin with &# and end with ;. The x indicates that what follows is a hexadecimal number representing the scalar value of a Unicode character, ie. the number assigned in the Unicode code charts.
А тут (PHP_VERSION < 5.3) получается, что &amp;#xHEX; рассматривается как номер символа в указанной в третьем аргументе кодовой таблице.

То есть, если мы напишем
Код:
&amp;#xFF;
, то браузер это интерпретирует как символ «&#255;», а не как «я», какую бы кодировку мы ни указали.
 

lamerz

Новичок
Автор оригинала: dimagolov
RTFM:

Теперь расскажи, где в строке "&#199;&#224;&#255;&#226;&#234;&#224;" есть HTML entities?
пардон... забыл ббкод php поставить... форум перевел
Автор оригинала: Вурдалак

Причина, как мне кажется, в том, что раньше было несоблюдение стандарта:
http://www.w3.org/International/tutorials/tutorial-char-enc/#Slide0430

А тут (PHP_VERSION < 5.3) получается, что &amp;#xHEX; рассматривается как номер символа в указанной в третьем аргументе кодовой таблице.

То есть, если мы напишем
Код:
&amp;#xFF;
, то браузер это интерпретирует как символ «&#255;», а не как «я», какую бы кодировку мы ни указали.
не совсем, если честно, понял..это же на уровне сервера, а не браузера...сейчас еще покурю немного мана... но!

если я напишу так
PHP:
html_entity_decode( "&#xC7;&#xE0;&#xFF;&#xE2;&#xEA;&#xE0;", ENT_QUOTES, 'utf8');
функция переведет коды... неправильно, но переведет.. это факт... :confused:
 

Вурдалак

Продвинутый новичок
lamerz
Всё правильно переводит. Откуда вообще у тебя эта каша взялась?
 
Сверху