8

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

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

4

5 回答 5

7

免责声明:我不会编码任何实体,除了 <、> 和 &。也就是说,如果您真的想要这个,请执行以下操作:

$str = '...';
$str = htmlentities($str,ENT_NOQUOTES,'UTF-8',false);
$str = str_replace(array('&lt;','&gt;'),array('<','>'), $str);
于 2009-12-22T12:36:26.633 回答
1

Pascal MARTIN发表了一个很好的答案

请参阅此SO 主题

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

$list = get_html_translation_table(HTML_ENTITIES);
unset($list['"']);
unset($list['<']);
unset($list['>']);
unset($list['&']);
于 2013-09-03T08:02:43.517 回答
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);
于 2009-12-22T12:41:25.920 回答
0

我以前没有使用过 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);

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

祝你好运。

于 2009-12-22T12:34:07.053 回答
-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);
于 2009-12-22T12:33:19.177 回答