PHP htmlentities

时间:2010-11-05 20:50:41

标签: php html-entities

在htmlentities中,如何选择性地对符号进行编码,使其不对<>个标记进行编码,但是对&进行编码?

3 个答案:

答案 0 :(得分:3)

只需使用:

<?php
$string = str_replace('&', '&amp;', $string);

有关str_replace的详细信息,请参阅this

答案 1 :(得分:2)

您没有获得'部分编码'选项;如果您想要转义或未转义特定字符,则必须手动执行。例如,要做你想要的

str_replace('&gt;', '>', str_replace('&lt;', '<', htmlentities($s)))

但是你想做什么呢?以上似乎不太可能有用。标记中的"个字符仍然会被转义,破坏属性值。

htmlentities一般也有问题,因为除非你专门为它提供正确的charset参数,否则它会将字符串中的任何非ASCII字符变成错误的HTML实体引用。通常最好使用htmlspecialchars(),它只影响真正特殊且需要在HTML中转义的少数几个字符。

如果您想要做的只是转义&字符,您可以使用简单的str_replace('&', '&amp;', $s)进行转义,但同样,这仍然会替换属于有效实体或字符引用的&符号。你确定要这么做吗?你只是想修复错误使用的未转换的&符号吗?如果是这样,您可以尝试使用正则表达式来选择使用不是有效实体/字符引用的&

答案 2 :(得分:1)

尝试这样的事情:

$string = htmlentities($string);
$string = str_replace(array('&lt;','&gt;'), array('<', '>'), $string);

在官方文档中,htmlentitiesstr_replace