У меня есть строка, которая могла бы быть похожей на это
$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 в целости
Disclaimer: Я не буду кодировать никакие сущности, за исключением <, > и &. Тем не менее, если вы действительно этого хотите, сделайте следующее:
$str = '...';
$str = htmlentities($str,ENT_NOQUOTES,'UTF-8',false);
$str = str_replace(array('<','>'),array('<','>'), $str);
Проблема, с которой вы сталкиваетесь, заключается в том, что при определенных обстоятельствах вы уже закодировали в тексте "<
" и ">
", поэтому вам приходится фильтровать их после преобразования.
Это похоже на ответ Эверта, но добавляет еще один шаг, чтобы разрешить содержимое типа 1 < 2
в разметке:
$str = htmlentities($str,ENT_NOQUOTES,'UTF-8',false);
$str = str_replace(array('<','>'),array('<','>'), $str);
$str = str_replace(array('&lt;','&gt'),array('<','>'), $str);
Я раньше не использовал htmlentities, но кажется, что это немного более надежная версия urlencode (который я использую очень часто). Вы можете попробовать:
htmlentities(strip_tags($str,ENT_COMPAT),'UTF-8',false);
Как маленький самородок, если вы хотите сохранить
, как стандартный carrage возвращается, вы можете сделать это:
htmlentities(strip_tags(str_replace("
", "\n",$str,ENT_COMPAT)),'UTF-8',false);
Я знаю, что иногда мне это нравится.
Удачи.
Если вы хотите преобразовать только текст, то попробуйте следующее:
$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);