循网移动 | 购买点卡 | 卡密充值
网站颜色:
问题状态:已解决
php5.4以上版本GBK编码下htmlspecialchars输出值为空,怎么办?
悬赏:0 浏览:2739次 离此问题结束还有: 计算中...     + 加入收藏夹
从旧版升级到php5.4,恐怕最麻烦的就是htmlspecialchars这个问题了!当然,htmlentities也会受影响,不过,对于中文站来说一般用htmlspecialchars比较常见,htmlentities非常少用到。最常见的是gbk字符集下输出为空...utf-8下,输出正常。
TAG:php5.4 htmlspecialchars gbk gb2312  提问者:teni - 状元 - 15-12-28 18:11
 
网友答案

admin
级别:探花
回复日期:2015-12-28 18:21:35
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;

编译后,原程序就不用做任何调整了。

参考地址:http://www.cycyuan.com/html/67-4/4086.htm


匿名
级别:童生
回复日期:2016-03-08 21:40:53
太专业了!!!!
回答问题
回答标题:
答案:
参考地址:
验证码:
 
最新问题
  • ·wwwwww
  • ·关于药品集中采购平台联通规..
  • ·php5.4以上版本GBK编码下html..
  • ·10循币循环营销对当今的医药营销有..
  • ·10循币医保支付价什么时候出台?
  • 公告区
    欢迎光临循网问吧?
    来这里问你不知道的;
    来这里给别人说你知道的;