Проблема синтаксического анализа PHP - и - PullRequest
21 голосов
/ 23 декабря 2010

Когда я пытаюсь проанализировать некоторый html, в котором есть  , а затем echo,   «превращается» в этот символ: Â.Кроме того, html_entity_decode() и str_replace() не изменяют его.

Почему это происходит?Как я могу удалить?

Ответы [ 3 ]

32 голосов
/ 23 декабря 2010

неразрывный пробел существует в UTF-8 из двух байтов: 0xC2 и 0xA0.

Когда эти байты представлены в ISO-8859-1 (однобайтовая кодировка) вместо UTF-8 (многобайтовая кодировка), эти байты становятся соответственно символами Â еще один неразрывный пробел .

Очевидно, вы анализируете HTML с использованием UTF-8 и выводите результаты с использованием ISO-8859-1. Чтобы решить эту проблему, вам нужно или проанализировать HTML, используя ISO-8859-1 или , повторить результаты, используя UTF-8. Я бы рекомендовал использовать UTF-8 полностью. Перейдите через PHP UTF-8 шпаргалку , чтобы выровнять все это.

2 голосов
/ 22 ноября 2013

preg_replace() также могут сделать трюк:

preg_replace("/&#?[a-z0-9]{2,8};/i","", $var);
2 голосов
/ 08 марта 2012
html_entity_decode(" ") == '\xa0'

Я думаю, что по замыслу, я не понимаю, почему str_replace не работает для вас, попробуйте этот фрагмент:

$nbsp = html_entity_decode(" ");
$s = html_entity_decode("[ ]");
$s = str_replace($nbsp, " ", $s);
echo $s;

возможно \ xa0, это не допустимая строка Unicode, поэтому с помощьюрезультат html_entity_decode () может быть более подходящим для замены текста вместо \ xa0.

Объяснение BalusC выглядит правдоподобно, вы можете попытаться вставить utf-8 \ xc2 \ xa0 в тогда пытаясь отобразить его как латинскийвместо utf8, если вы хотите использовать Unicode, вы должны хранить кодировку utf-8 везде, от кодировки сервера до базы данных, так как у вас будет такая же проблема при использовании, например, à

...