php5.2 Json不能正确处理中文、GB编码的解决方法

2015-01-24信息快讯网

json_encode对中文的处理是有问题,不能处理GB编码,所有的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);//任意编码下都正常显示 
********/ 
PHP中cookie和session的区别实例分析
ThinkPHP调用common/common.php函数提示错误function undefined的解决方法
PHP实现利用MySQL保存session的方法
destoon出现验证码不显示时的紧急处理方法
destoon供应信息title调用出公司名称的方法
访问编码后的中文URL返回404错误的解决方法
PHP中使用json数据格式定义字面量对象的方法
phpword插件导出word文件时中文乱码问题处理方案
PHP针对常规模板引擎中与CSS/JSON冲突的解决方法
php解析json数据实例
phpExcel中文帮助手册之常用功能指南
PHP中使用asort进行中文排序失效的问题处理
PHP JSON出错:Cannot use object of type stdClass as array解决方法
PHP解码unicode编码的中文字符代码分享
getJSON跨域SyntaxError问题分析
两种设置php载入页面时编码的方法
完美的2个php检测字符串是否是utf-8编码函数分享
PHP中遇到BOM、<feff>编码导致json_decode函数无法解析问题
thinkphp验证码显示不出来的解决方法
php页码形式分页函数支持静态化地址及ajax分页
php操作MongoDB基础教程(连接、新增、修改、删除、查询)
xss防御之php利用httponly防xss攻击
php ctype函数中文翻译和示例
php设置session值和cookies的学习示例
PHP fopen()和 file_get_contents()应用与差异介绍
支持中文和其他编码的php截取字符串函数分享(截取中文字符串)
zf框架的session会话周期及次数限制使用示例
php截取字符串之截取utf8或gbk编码的中英文字符串示例
php数组编码转换示例详解
使用Discuz关键词服务器实现PHP中文分词
php实现文件编码批量转换
php网页标题中文乱码的有效解决方法
关于js和php对url编码的处理方法
php面向对象中的魔术方法中文说明
php判断是否为json格式的方法
PHP json_decode函数详细解析
php使用curl发送json格式数据实例
关于JSON以及JSON在PHP中的应用技巧
json的键名为数字时的调用方式(示例代码)
©2014-2024 dbsqp.com