Подтвердить что ты не робот

Проблема с анализом PHP - и Â

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

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

4b9b3361

Ответ 1

неразрывное пространство существует в 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 cheatsheet, чтобы выровнять все.

Ответ 2

html_entity_decode(" ") == '\xa0'

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

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

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

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

Ответ 3

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

preg_replace("/&#?[a-z0-9]{2,8};/i","", $var);