我有一个可能看起来像这样的字符串
$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 完整
我有一个可能看起来像这样的字符串
$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 完整
免责声明:我不会编码任何实体,除了 <、> 和 &。也就是说,如果您真的想要这个,请执行以下操作:
$str = '...';
$str = htmlentities($str,ENT_NOQUOTES,'UTF-8',false);
$str = str_replace(array('<','>'),array('<','>'), $str);
Pascal MARTIN发表了一个很好的答案
请参阅此SO 主题
要恢复,您可以使用这段代码来检索对应列表character => entity
:
$list = get_html_translation_table(HTML_ENTITIES);
unset($list['"']);
unset($list['<']);
unset($list['>']);
unset($list['&']);
您面临的问题是,在某些情况下,您已经在文本中编码了 ' <
' 和 ' >
',因此您必须在转换后将它们过滤掉。
这类似于 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);
我以前没有使用过 htmlentities,但它似乎是一个更强大的 urlencode 版本(我经常使用它)。您可能想尝试:
htmlentities(strip_tags($str,ENT_COMPAT),'UTF-8',false);
就像一个小金块,如果你想保留<br>
标准的carrage return,你可以这样做:
htmlentities(strip_tags(str_replace("<br>","\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);