在PHP中编码HTML实体但忽略HTML标记

时间:2009-12-22 12:23:02

标签: php html html-entities

我有一个可能看起来像这样的字符串

$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完整

5 个答案:

答案 0 :(得分:6)

免责声明:我不会对任何实体进行编码,但&lt;,&gt;除外和&amp ;.也就是说,如果你真的想要这个,那就这样做:

$str = '...';
$str = htmlentities($str,ENT_NOQUOTES,'UTF-8',false);
$str = str_replace(array('&lt;','&gt;'),array('<','>'), $str);

答案 1 :(得分:1)

您遇到的问题是,在您的文字中已经编码了“<”和“>”的情况下,您必须在转换后将其过滤掉。

这与Evert的答案类似,但在标记中添加了一个允许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);

答案 2 :(得分:1)

一个好的答案是Pascal MARTIN

的帖子

请参阅此SO topic

要恢复,您可以使用这段代码来检索对应列表character => entity

$list = get_html_translation_table(HTML_ENTITIES);
unset($list['"']);
unset($list['<']);
unset($list['>']);
unset($list['&']);

答案 3 :(得分:0)

我之前没有使用过htmlentities,但它似乎是一个更强大的urlencode版本(我使用了很多)。您可能想尝试:

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

就像有点小块一样,如果你想保留<br>作为标准的车祸返回,你可以这样做:

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

我知道这是我有时喜欢做的事情。

祝你好运。

答案 4 :(得分:-1)

如果您只想转换文字,请尝试以下操作:

$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);