我有一个可能看起来像这样的字符串
$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完整
答案 0 :(得分:6)
免责声明:我不会对任何实体进行编码,但&lt;,&gt;除外和&amp ;.也就是说,如果你真的想要这个,那就这样做:
$str = '...';
$str = htmlentities($str,ENT_NOQUOTES,'UTF-8',false);
$str = str_replace(array('<','>'),array('<','>'), $str);
答案 1 :(得分:1)
您遇到的问题是,在您的文字中已经编码了“<
”和“>
”的情况下,您必须在转换后将其过滤掉。
这与Evert的答案类似,但在标记中添加了一个允许1 < 2
等内容的步骤:
$str = htmlentities($str,ENT_NOQUOTES,'UTF-8',false);
$str = str_replace(array('<','>'),array('<','>'), $str);
$str = str_replace(array('&lt;','&gt'),array('<','>'), $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);