php5.4以上版本GBK编码下htmlspecialchars输出为空问题解决方法汇总


Posted in PHP onApril 03, 2015

从旧版升级到php5.4,恐怕最麻烦的就是htmlspecialchars这个问题了!当然,htmlentities也会受影响,不过,对于中文站来说一般用htmlspecialchars比较常见,htmlentities非常少用到。

可能老外认为网页普遍应该是utf-8编码的,于是苦了那些用GB2312,GBK编码的中文站......!

具体表现:

$str = "9enjoy.com的php版本是5.2.10";

echo htmlspecialchars($str);

gbk字符集下输出为空...utf-8下,输出正常。

为什么呢,原因在于5.4.0对这个函数的变化:

5.4.0   The default value for the encoding parameter was changed to UTF-8.

原来是什么呢?
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.

原来是ISO-8859-1,5.4后默认变成utf-8!然后中文使用这个函数就输出为空白了。

国内一堆开源程序在5.4下都会有这样的问题,DISCUZ官方也建议用户不要升级到5.4

解决方案:

1.苦逼的修改所有用到htmlspecialchars地方的程序

1.1 其第二个$flags参数,默认是ENT_COMPAT,因此改成

htmlspecialchars($str,ENT_COMPAT,'GB2312');

为什么不是GBK?因为没有GBK这个参数,如果强行使用GBK,则报错给你看:
Warning: htmlspecialchars(): charset `gbk' not supported, assuming utf-8

为了能使用GBK,则改成:
htmlspecialchars($str,ENT_COMPAT,'ISO-8859-1');

1.2.一样是改程序,但可以省略一个参数。
可以在网页头部加
ini_set('default_charset','gbk');

然后改成
htmlspecialchars($str,ENT_COMPAT,'');

文档中有写:An empty string activates detection from script encoding (Zend multibyte), default_charset and current locale (see nl_langinfo() and setlocale()), in this order. Not recommended.
大概意思就是:传入空字符串则使用default_charset的编码

1.3.封装一个函数吧...本来htmlspecialchars这个单词一直不好记。

function htmlout($str) {

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

}

然后去批量替换。

2.直接修改源码,重编译!这也是目前我在线上做的方案。
修改ext/standard/html.c
大概在372行

/* 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;

编译后,原程序就不用做任何调整了。
安装方法可参考:https://3water.com/article/63388.htm

windows下怎么办?这个,自己想办法编译吧,难度比较大...
提供一个网址供参考:https://3water.com/article/63391.htm
引用其一句话:准备好咖啡、可乐,做好准备,可能要折腾数小时…

PHP 相关文章推荐
php中的时间显示
Jan 18 PHP
ThinkPHP3.1新特性之内容解析输出详解
Jun 19 PHP
Yii查询生成器(Query Builder)用法实例教程
Sep 04 PHP
php进行支付宝开发中return_url和notify_url的区别分析
Dec 22 PHP
php查询mssql出现乱码的解决方法
Dec 29 PHP
php利用事务处理转账问题
Apr 22 PHP
PHP输出缓冲控制Output Control系列函数详解
Jul 02 PHP
分享五个PHP7性能优化提升技巧
Dec 07 PHP
thinkPHP3.2简单实现文件上传的方法
May 16 PHP
PHP框架自动加载类文件原理详解
Jun 06 PHP
PHP getName()函数讲解
Feb 03 PHP
详解PHP设计模式之依赖注入模式
May 25 PHP
Windows下编译PHP5.4和xdebug全记录
Apr 03 #PHP
Centos下升级php5.2到php5.4全记录(编译安装)
Apr 03 #PHP
php实现在限定区域里自动调整字体大小的类实例
Apr 02 #PHP
php实现专业获取网站SEO信息类实例
Apr 02 #PHP
php获得网站访问统计信息类Compete API用法实例
Apr 02 #PHP
php实现从上传文件创建缩略图的方法
Apr 02 #PHP
php调用KyotoTycoon简单实例
Apr 02 #PHP
You might like
火影忍者:三大瞳力之一的白眼,为什么没有写轮眼那么出色?
2020/03/02 日漫
亚洲咖啡有什么?亚洲咖啡产地介绍 亚洲咖啡有什么特点?
2021/03/05 新手入门
CURL的学习和应用(附多线程实现)
2013/06/03 PHP
php打包网站并在线压缩为zip
2016/02/13 PHP
Thinkphp事务操作实例(推荐)
2017/04/01 PHP
php利用fsockopen GET/POST提交表单及上传文件
2017/05/22 PHP
如何修改yii2.0自带的user表为其它的表
2017/08/01 PHP
PHP递归实现汉诺塔问题的方法示例
2017/11/25 PHP
PHP使用星号替代用户名手机和邮箱的实现代码
2018/02/07 PHP
通过jquery还原含有rowspan、colspan的table的实现方法
2012/02/10 Javascript
仿中关村在线首页弹出式广告插件(jQuery版)
2012/05/03 Javascript
javascript列表框操作函数集合汇总
2013/11/28 Javascript
javascript简单实现命名空间效果
2014/03/06 Javascript
javascript结合Flexbox简单实现滑动拼图游戏
2016/02/18 Javascript
同步文本框内容JS代码实现
2016/08/04 Javascript
利用jQuery插件imgAreaSelect实现图片上传裁剪(同步显示图像位置信息)
2016/12/02 Javascript
webpack开发环境和生产环境的深入理解
2018/11/08 Javascript
动态内存分配导致影响Javascript性能的问题
2018/12/18 Javascript
webpack的tree shaking的实现方法
2019/09/18 Javascript
Openlayers实现点闪烁扩散效果
2020/09/24 Javascript
[07:38]2014DOTA2国际邀请赛 Newbee顺利挺进胜者组赛后专访
2014/07/15 DOTA
python查找第k小元素代码分享
2013/12/18 Python
Python3 queue队列模块详细介绍
2018/01/05 Python
详解Django项目中模板标签及模板的继承与引用(网站中快速布置广告)
2019/03/27 Python
python sorted函数原理解析及练习
2020/02/10 Python
html5 css3 动态气泡按钮实例演示
2012/12/02 HTML / CSS
Vichy薇姿加拿大官网:法国药妆,全球专业敏感肌护肤领先品牌
2018/07/11 全球购物
红色连衣裙精品店:Red Dress Boutique
2018/08/11 全球购物
蒙蒂塞罗商店:Monticello Shop
2018/11/25 全球购物
巴西香水和化妆品购物网站:The Beauty Box
2019/09/03 全球购物
环境工程毕业生自荐信
2013/11/17 职场文书
大专应届生个人的自我评价
2013/11/21 职场文书
4s店市场专员岗位职责
2014/04/09 职场文书
关于清明节的演讲稿
2014/09/13 职场文书
课题研究阶段性总结
2015/08/13 职场文书
电脑开机弹出documents文件夹怎么回事?弹出documents文件夹解决方法
2022/04/08 数码科技