车栈

php5.4 htmlspecialchars 函数的变化

上周末给一个discuz论坛做代码迁移到新服务器,过程一切顺利,然后有用户反应无法点评了,具体是:

  1. 点评中发布纯中文,会提示没有输入内容的错误
  2. 不含中文的可以正确发布
  3. 回帖中的原内容引用也消失了

从上面可以看出问题应该出在编码上了。

上面描述的问题是gbk编码。

经过一番的debug,在经过 htmlspecialchars 处理后内容就变为空了。

新系统和老系统不一样的地方就是php版本从5.3升级到5.4了。

于是查了一下这个函数的文档。

5.4.0 The default value for the encoding parameter was changed to UTF-8. 5.4.0 The constants ENT_SUBSTITUTE, ENT_DISALLOWED, ENT_HTML401, ENT_XML1, ENT_XHTML and ENT_HTML5 were added.

原来5.4开始,默认的编码变为了utf-8。

解决方法也很简单:

调用htmlspecialchars 的地方都变成指定编码为gbk即可。