Закодируйте объекты HTML, но проигнорируйте HTML-тэги - в PHP

У меня есть строка, которая могла бы быть похожей на это

$str = "<p>Me & Mrs Jones <br /> live in <strong style="color:#FFF;">España</strong></p>";
htmlentities($str,ENT_COMPAT,'UTF-8',false);

Как я могу преобразовать текст в объекты HTML, не преобразовывая HTML-тэги?

примечание: Я должен сохранить HTML в целости

8
задан ed209 22 December 2009 в 12:41
поделиться

4 ответа

Disclaimer: Я не буду кодировать никакие сущности, за исключением <, > и &. Тем не менее, если вы действительно этого хотите, сделайте следующее:

$str = '...';
$str = htmlentities($str,ENT_NOQUOTES,'UTF-8',false);
$str = str_replace(array('&lt;','&gt;'),array('<','>'), $str);
6
ответ дан 5 December 2019 в 21:19
поделиться

Проблема, с которой вы сталкиваетесь, заключается в том, что при определенных обстоятельствах вы уже закодировали в тексте "<" и ">", поэтому вам приходится фильтровать их после преобразования.

Это похоже на ответ Эверта, но добавляет еще один шаг, чтобы разрешить содержимое типа 1 < 2 в разметке:

$str = htmlentities($str,ENT_NOQUOTES,'UTF-8',false);
$str = str_replace(array('&lt;','&gt;'),array('<','>'), $str);
$str = str_replace(array('&amp;lt;','&amp;gt'),array('&lt;','&gt;'), $str);
1
ответ дан 5 December 2019 в 21:19
поделиться

Я раньше не использовал htmlentities, но кажется, что это немного более надежная версия urlencode (который я использую очень часто). Вы можете попробовать:

htmlentities(strip_tags($str,ENT_COMPAT),'UTF-8',false);

Как маленький самородок, если вы хотите сохранить
, как стандартный carrage возвращается, вы можете сделать это:

htmlentities(strip_tags(str_replace("
", "\n",$str,ENT_COMPAT)),'UTF-8',false);

Я знаю, что иногда мне это нравится.

Удачи.

0
ответ дан 5 December 2019 в 21:19
поделиться

Если вы хотите преобразовать только текст, то попробуйте следующее:

$orig = "<p>Me & Mrs Jones <br /> live in <strong style="color:#FFF;">España</strong></p>";
$str = strip_tags($orig);

$str = htmlentities($str,ENT_COMPAT,'UTF-8',false);
-1
ответ дан 5 December 2019 в 21:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: