从旧版升级到php5.4,恐怕最麻烦的就是htmlspecialchars这个问题了!当然,htmlentities也会受影响,不过,对于中文站来说一般用htmlspecialchars比较常见,htmlentities非常少用到。 可能老外认为网页普遍应该是utf-8编码的,于是苦了那些用GB2312,GBK编码的中文站......! 具体表现: 复制代码代码如下: $str = "9enjoy.com的php版本是5.2.10"; echo htmlspecialchars($str);
为什么呢,原因在于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.
国内一堆开源程序在5.4下都会有这样的问题,DISCUZ官方也建议用户不要升级到5.4 解决方案: 1.苦逼的修改所有用到htmlspecialchars地方的程序 1.1 其第二个$flags参数,默认是ENT_COMPAT,因此改成 复制代码代码如下: htmlspecialchars($str,ENT_COMPAT,'GB2312');
复制代码代码如下: Warning: htmlspecialchars(): charset `gbk' not supported, assuming utf-8
复制代码代码如下: htmlspecialchars($str,ENT_COMPAT,'ISO-8859-1');
复制代码代码如下: ini_set('default_charset','gbk');
复制代码代码如下: htmlspecialchars($str,ENT_COMPAT,'');
1.3.封装一个函数吧...本来htmlspecialchars这个单词一直不好记。 复制代码代码如下: function htmlout($str) { return htmlspecialchars($str,ENT_COMPAT,'ISO-8859-1'); }
2.直接修改源码,重编译!这也是目前我在线上做的方案。 复制代码代码如下: /* Default is now UTF-8 */ if (charset_hint == NULL) return cs_utf_8;
复制代码代码如下: /* Default is now UTF-8 */ if (charset_hint == NULL) return cs_8859_1;
windows下怎么办?这个,自己想办法编译吧,难度比较大... |
您看到此篇文章时的感受是: |
1、凡标注“原创” 的所有作品,版权均属于县域医疗卫生市场研究中心,未经本网授权,任何单位及个人不得转载、摘编或以其它方式使用上述作品。已经本网授权使用作品的,应在授权范围内使用,并注明“县域医疗卫生市场研究中心”。违反上述声明者,本网将追究其相关法律责任。 2、凡本网注明 “来源:XXX” 的作品,均转载自其它媒体,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如因作品内容、版权和其它问题需要同本网联系的,请在30日内进行。 iyuanru@126.com |