在htmlentities中,如何选择性地对符号进行编码,使其不对<
和>
个标记进行编码,但是对&
进行编码?
答案 0 :(得分:3)
答案 1 :(得分:2)
您没有获得'部分编码'选项;如果您想要转义或未转义特定字符,则必须手动执行。例如,要做你想要的说:
str_replace('>', '>', str_replace('<', '<', htmlentities($s)))
但是你想做什么呢?以上似乎不太可能有用。标记中的"
个字符仍然会被转义,破坏属性值。
htmlentities
一般也有问题,因为除非你专门为它提供正确的charset参数,否则它会将字符串中的任何非ASCII字符变成错误的HTML实体引用。通常最好使用htmlspecialchars()
,它只影响真正特殊且需要在HTML中转义的少数几个字符。
如果您想要做的只是转义&
字符,您可以使用简单的str_replace('&', '&', $s)
进行转义,但同样,这仍然会替换属于有效实体或字符引用的&符号。你确定要这么做吗?你只是想修复错误使用的未转换的&符号吗?如果是这样,您可以尝试使用正则表达式来选择使用不是有效实体/字符引用的&
。
答案 2 :(得分:1)
尝试这样的事情:
$string = htmlentities($string);
$string = str_replace(array('<','>'), array('<', '>'), $string);
在官方文档中,htmlentities和str_replace