问:
htmlspecialchars转义后,怎么正常输出内容?
比如 &符号,被转义为 &
答:
使用html_entity_decode 转回来即可。
举例:
把 HTML 实体转换为字符:
<?php
$str = "Bill & 'Steve'";
echo html_entity_decode($str, ENT_COMPAT); // 只转换双引号
echo "<br>";
echo html_entity_decode($str, ENT_QUOTES); // 转换双引号和单引号
echo "<br>";
echo html_entity_decode($str, ENT_NOQUOTES); // 不转换任何引号
?>
以上代码的 HTML 输出(查看源代码):
<!DOCTYPE html>
<html>
<body>
Bill & 'Steve'<br>
Bill & 'Steve'<br>
Bill & 'Steve'
</body>
</html>
以上代码的浏览器输出:
Bill & 'Steve'
Bill & 'Steve'
Bill & 'Steve'
解释:
- ENT_COMPAT – 默认。仅编码双引号。
- ENT_QUOTES – 编码双引号和单引号。
- ENT_NOQUOTES – 不编码任何引号。
弊端:
可能引起xss安全问题,自行选择是否使用和使用位置。