Кодировка UTF-8 и ISO 8859-1 в PHP - PullRequest
2 голосов
/ 28 февраля 2011

Я пытаюсь преобразовать все & nbsp; экземпляры к обычным пробелам в PHP:

echo '<meta charset="UTF-8" /> ';
echo html_entity_decode('&nbsp;');
echo html_entity_decode('&nbsp;', ENT_COMPAT, 'UTF-8');

Если первая строка закомментирована, то вывод будет в ISO 8859-1 и будет иметь вид:

 Â

Там, где впереди есть место. Если указана кодировка UTF-8, она гласит:

Это неопределенный символ UTF-8, за которым следует пробел. Можно ли в любом случае обеспечить правильное декодирование всех пространств сущностей HTML независимо от кодировки?

Символ пробела на самом деле просто пример, и я пытаюсь прочитать html-ввод из неопределенного набора символов и отобразить его. Так что <и <оба станут <. </p>

Ответы [ 3 ]

3 голосов
/ 28 февраля 2011

&nbsp; не пробел.В ISO 8859-1 это байт 160, а в UTF-8 - \xc2\xa0.Поскольку имя no breakable space подразумевает, что браузер не заменит его для переноса строки.

Если вам нужен пробел, вам придется заменить его пробелом.

1 голос
/ 28 февраля 2011

Это проблема с кодировками. Они не совместимы. Вы должны использовать разные опции в html_entity_decode для каждой кодировки. Однако вы можете сначала преобразовать ввод в utf-8 ( iconv ) и использовать html_entity_decode($string, ENT_COMPAT, 'UTF-8') позже.

Если вы не знаете кодировку ввода, вы должны угадать.

0 голосов
/ 28 февраля 2011

Почему бы не отправить заголовок первым?

header("Content-type: text/html; charset=utf-8");
echo html_entity_decode("&nbsp;", ENT_COMPAT, 'UTF-8');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...