php5.2 Json不能正确处理中文、GB编码的解决方法
php5.2新增的json功能是非常受欢迎的,但是经过测试发现,
json_encode对中文的处理是有问题的,
1.不能处理gb编码,所有的gb编码都会替换成空字符.
2.utf8编码的中文被编码成unicode编码,相当于javascript的escape函数处理的结果.
/*
为了能正确使用json,首先我们就应该在编码上采用utf8编码,然后再对json_encode的返回结果稍加处理就可以得到正确的结果了。
我写了一个简单的类,将这两个函数包装了一下,
**/
class json{
public static function encode($str){
$code = json_encode($str);
return preg_replace("#\\\u([0-9a-f]+)#ie", "iconv('ucs-2', 'utf-8', pack('h4', '\\1'))", $code);
}
public static function decode($str){
return json_decode($str);
}
}
//使用的时候
json::encode($code);
json::decode($code);
/**这样可以正确处理utf8编码的中文了。
ps:对于gb编码的中文,我们可以在编码时先转成utf8编码,再进行编码,解码的时候再进行一个utf8 -> gb的转换就可以了。
另外一般json_encode的结果我们是返回到客户端来使用,我们其实还可以用javascript的unescape函数来对unicode编码的中文进行解码,从而还原成正确的中文。
或者用:$title = mb_convert_encoding($title, 'html-entities', $this->_outcharset);//任意编码下都正常显示
********/
如对本文有疑问,
点击进行留言回复!!
相关文章:
-
-
-
-
-
-
-
-
管理后台无限级菜单
管理后台菜单遍历很久就想做一个通用的管理后台出来,一直太懒没做,今天开始粗略搞了一下,只是先把框架搭建好,菜单栏...
[阅读全文]
-
桥接模式学习总结
桥接模式引言假如一个系统需要加入报表模块,主要的开发点是数据的获取和报表的显示方式。数据的获取可能是从系统数据库...
[阅读全文]
-
-
网友评论