编码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('<','>'),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('<','>'),array('<','>'), $str);
$str = str_replace(array('&lt;','&gt'),array('<','>'), $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);可能重复: