WEB教程基地:www.91ctc.com为你搭建学习WEB技术的优秀平台
在线留言 网站地图 加入收藏 设为首页
您的位置:本站首页>>PHP>>htmlspecialchars函数把GBK下的字符串转换为空的问题

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

[ 录入者:91ctc | 时间:2016-08-18 11:27:01 | 作者: 91ctc| 来源:本站原创 | 浏览: 次 ]


最近把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的源程序,自己重新编译,这个玩法也不是不可以

修改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;

编译一下,就好了


关闭】【返回顶部

下一篇:没有了!
相关文章
{xiangguan_list}
91ctc.com 网络先锋,引领科技,本站原创作品[转载请注明出处]。联系我们
Copyright© 2010-2017 计算机教程中心网 . All rights reserved. 苏ICP备11081842号