Html_entity_decode также заменяет? Если нет, как заменить его? - PullRequest
12 голосов
/ 08 июня 2011

У меня есть ситуация, когда я передаю строку в функцию. Я хочу преобразовать   в "" (пробел) перед передачей его в функцию. html_entity_decode делает это?

Если не как это сделать?

Мне известно о str_replace, но есть ли другой выход?

Ответы [ 4 ]

35 голосов
/ 08 июня 2011

Цитата из html_entity_decode() руководство:

Вы можете спросить, почему trim(html_entity_decode(' ')); не уменьшает строку до пустой строка, потому что ' ' сущность не является кодом 32 ASCII (который является зачищено с помощью trim (), но с кодом ASCII 160 (0xa0) по умолчанию ISO 8859-1 CharacterSet.

Вы можете использовать str_replace() для замены символа ascii # 160 на пробел:

<?php
$a = html_entity_decode('>&nbsp;<');
echo 'before ' . $a . PHP_EOL;
$a = str_replace("\xA0", ' ', $a);
echo ' after ' . $a . PHP_EOL;
5 голосов
/ 08 июня 2011

YES

См. Руководство по PHP http://php.net/manual/en/function.html-entity-decode.php.

Внимательно прочитайте Примечания , возможно, это проблема, с которой вы столкнулись:

Вы можете задаться вопросом, почему обрезать (html_entity_decode ('& nbsp;')); не сводит строку к пустой строке, это потому, что сущность '' не является кодом ASCII 32 (который удаляется с помощью trim ()), но с кодом ASCII 160 (0xa0) в кодировке ISO 8859-1 по умолчанию.

4 голосов
/ 08 июня 2011

html_entity_decode конвертирует &nbsp; в пробел, только не в "простой" (ASCII 32), а в неразрывный пробел (ASCII 160) (так как это определение &nbsp;).

Если вам нужно преобразовать в ASCII 32, вам все равно потребуется str_replace() или, в зависимости от вашей ситуации, preg_match("/s+", ' ', $string) для преобразования всех видов пробелов в простые пробелы.

1 голос
/ 20 ноября 2018

Не уверен, что это жизнеспособное решение для большинства случаев, но я использовал trim(strip_tags(html_entity_decode(htmlspecialchars_decode($html), ENT_QUOTES, 'UTF-8'))); в своем последнем приложении.Добавление htmlspecialchars_decode() первоначально было единственной вещью, которая фактически лишит их.

...