php5.4 htmlspecialchars 函数的变化
上周末给一个discuz论坛做代码迁移到新服务器,过程一切顺利,然后有用户反应无法点评了,具体是:
- 点评中发布纯中文,会提示没有输入内容的错误
- 不含中文的可以正确发布
- 回帖中的原内容引用也消失了
从上面可以看出问题应该出在编码上了。
上面描述的问题是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即可。