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

编码HTML实体但忽略HTML标记-在PHP中,php,html,html-entities,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); $str=“我和琼斯夫人生活在España”; htmlentities($str,ENT_COMPAT,'UTF-8',假);

我有一根看起来像这样的线

$str = "<p>Me & Mrs Jones <br /> live in <strong style="color:#FFF;">España</strong></p>";
htmlentities($str,ENT_COMPAT,'UTF-8',false);
$str=“我和琼斯夫人
生活在España

”; htmlentities($str,ENT_COMPAT,'UTF-8',假);
如何在不转换HTML标记的情况下将文本转换为HTML实体


注意:我需要保持HTML的完整性

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

$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);
$orig=“我和琼斯夫人
生活在España

”; $str=带标签($orig); $str=htmlentities($str,ENT_COMPAT,'UTF-8',false);
我以前没有使用过htmlentities,但它似乎是urlencode的一个更健壮的版本(我经常使用)。您可能要尝试:

htmlentities(strip_标签($str,ENT_COMPAT),'UTF-8',false)

就像一块小金块,如果您想保留

作为标准carrage返回,您可以这样做:

htmlentities(strip_标签(str_replace(“
”,“\n”,$str,ENT_COMPAT)),'UTF-8',false)

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


祝你好运。

免责声明:除了和&,我不会对任何实体进行编码。也就是说,如果你真的想这样做,就这样做:

$str = '...';
$str = htmlentities($str,ENT_NOQUOTES,'UTF-8',false);
$str = str_replace(array('&lt;','&gt;'),array('<','>'), $str);
$str='…';
$str=htmlentities($str,entnoquotes,'UTF-8',false);
$str=str_替换(数组(“”,),数组(“”,$str);

您面临的问题是,在某些情况下,您已经在文本中对“
”进行了编码,因此您必须在转换后将其过滤掉

这与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);
$str=htmlentities($str,entnoquotes,'UTF-8',false);
$str=str_替换(数组(“”,),数组(“”,$str);
$str=str_replace(数组('&;lt;'、'&;gt')、数组('''、'')、$str);

一个很好的答案是

看到这个了吗

要继续,您可以使用这段代码检索对应的列表
character=>entity

$list = get_html_translation_table(HTML_ENTITIES);
unset($list['"']);
unset($list['<']);
unset($list['>']);
unset($list['&']);
$list=get\u html\u translation\u表(html\u实体);
未设置($list[“]”);
未设置($列表['']);
未设置($列表['和']);

urlencode和htmlentities做了不同的事情:urlencode使字符串可以有效地放入url(例如,转换为%26),htmlentities可以在HTML中转义sring(例如,转换为)。我也同意这一点,大多数时候不需要对“and”进行编码。像€,á,é这样的东西应该已经由Unicode处理了。@TravisO:我希望输入已经是有效的HTML了。如果他的标记中有2>5,则不会像第三行那样处理:$str=str_replace(array(“”),$str(“”),$str);可能重复: