html判断为空的函数,htmlspecialchars函数把GBK下的字符串转换为空的问题

最近把PHP版本从5.2.6升级到了5.5.10,升级后发现,程序中凡是使用htmlspecialchars函数的地方,htmlspecialchars都把字符串转换成空白字符,起初以为是新环境配置问题,以为是不支持htmlspecialchars函数。后来经过分析,发现不是。

官方说法:5.4.0   The default value for the encoding parameter was changed to UTF-8.

哦,原来如此。

实际上,htmlentities也会受影响,这也就苦了使用GBK编码的开源CMS和论坛了,

所以,很多国内开源的系统,不建议用户升级到5.4以上版本。

那遇到这个问题怎么办呢。

方案一、修改程序,把所有使用到htmlspecialchars的地方都改掉。

方案二、看一下这个函数:string htmlspecialchars ( string $string [, int $flags = ENT_COMPAT | ENT_HTML401 [, string $encoding = 'UTF-8' [, bool $double_encode = true ]]] )

Defines encoding used in conversion. If omitted, the default value for this argument is ISO-8859-1 in versions of PHP prior to 5.4.0, and UTF-8 from PHP 5.4.0 onwards.

有第二个参数,那就用试试。htmlspecialchars($str,ENT_COMPAT,'GB2312');

不能使用GBK,因为:

Warning: htmlspecialchars(): charset `gbk' not supported, assuming utf-8

如果要是红GBK,可以:htmlspecialchars($str,ENT_COMPAT,'ISO-8859-1');

也可以自己写个自定义函数:function htmlout($str) {

return htmlspecialchars($str,ENT_COMPAT,'ISO-8859-1');

}

自己定义的函数好拼写。在一些非智能提示的开发工具中,自己写的函数好记。

方案三、修改PHP的源程序,自己重新编译,这个玩法也不是不可以

9f55e2032ad7da6367c17feea11f830c.gif

修改ext/standard/html.c/* Default is now UTF-8 */

if (charset_hint == NULL)

return cs_utf_8;

把cs_utf_8改成 cs_8859_1/* Default is now UTF-8 */

if (charset_hint == NULL)

return cs_8859_1;

编译一下,就好了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值