htmlspecialchars输出空白

时间:2012-06-26 15:11:21

标签: php html htmlspecialchars

同时使用htmlspecialchars和htmlentities导致符号甚至单'引号等项目的空白输出。显然,这绝对是无用的,但是在不使用html字符的情况下输出数据会导致这两个符号都出现。出现这种情况的原因是什么?

这是导致问题的代码:

<p>
<?php 
    echo nl2br(htmlspecialchars($aboutarray[0]['about_us'], ENT_COMPAT, "UTF-8")); 
?>
</p>

1 个答案:

答案 0 :(得分:14)

该字符串未以有效的UTF-8编码进行编码。它可能是另一种编码,如UTF-16,也可能只包含一些与任何格式都不对应的二进制垃圾。

最重要的是,由于您指定了“UTF-8”作为htmlspecialchars()的编码类型参数,如果字符串不符合“UTF-8”,它将返回空字符串。它在PHP manual中说明了这一点。

一个简单的解决方法是使用substitute或ignore标志。变化:

htmlspecialchars($aboutarray[0]['about_us'], ENT_COMPAT, "UTF-8")

要:

htmlspecialchars($aboutarray[0]['about_us'], ENT_COMPAT|ENT_SUBSTITUTE, "UTF-8")

或者:

htmlspecialchars($aboutarray[0]['about_us'], ENT_COMPAT|ENT_IGNORE, "UTF-8")

注意:ENT_IGNORE删除不符合的字节。这可能会导致a security issue最好真正了解字符串的内容以及字符串的编码方式。更正问题的根源而不是使用简单的ENT_IGNORE修复。

你应该问自己为什么你的字符串没有用UTF-8编码...... 应该,但事实并非如此。

我碰巧刚遇到这个问题;您可以阅读有关返回空字符串的原因的详细信息here