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


Posted in PHP onMarch 28, 2014

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 相关文章推荐
PHP中实现汉字转区位码应用源码实例解析
Jun 14 PHP
PHP中static关键字原理的学习研究分析
Jul 18 PHP
PHP 获取文件路径(灵活应用__FILE__)
Feb 15 PHP
php实现统计邮件大小的方法
Aug 06 PHP
Laravel 5 学习笔记
Mar 06 PHP
修改PHP脚本使WordPress拦截垃圾评论的方法示例
Dec 10 PHP
基于jQueryUI和Corethink实现百度的搜索提示功能
Nov 09 PHP
PHP经典实用正则表达式小结
May 04 PHP
thinkPHP多表查询及分页功能实现方法示例
Jul 03 PHP
Thinkphp结合AJAX长轮询实现PC与APP推送详解
Jul 31 PHP
php实现映射操作实例详解
Oct 02 PHP
Yii框架多语言站点配置方法分析【中文/英文切换站点】
Apr 07 PHP
php页码形式分页函数支持静态化地址及ajax分页
Mar 28 #PHP
小谈php正则提取图片地址
Mar 27 #PHP
php顺序查找和二分查找示例
Mar 27 #PHP
php求两个目录的相对路径示例(php获取相对路径)
Mar 27 #PHP
php环境套包 dedeampz 伪静态设置示例
Mar 26 #PHP
php去除换行(回车换行)的三种方法
Mar 26 #PHP
php的memcache类分享(memcache队列)
Mar 26 #PHP
You might like
PHP下MAIL的另一解决方案
2006/10/09 PHP
WordPress开发中自定义菜单的相关PHP函数使用简介
2016/01/05 PHP
laravel框架查询数据集转为数组的两种方法
2019/10/10 PHP
浅谈thinkphp的nginx配置,以及重写隐藏index.php入口文件方法
2019/10/12 PHP
PHP保存Base64图片base64_decode的问题整理
2019/11/04 PHP
arguments对象
2006/11/20 Javascript
document.open() 与 document.write()的区别
2007/08/13 Javascript
IE与FireFox的JavaScript兼容问题解决办法
2013/12/31 Javascript
jQuery中toggle()函数的使用实例
2015/04/17 Javascript
javascript实现的登陆遮罩效果汇总
2015/11/09 Javascript
JavaScript ES6中CLASS的使用详解
2016/11/22 Javascript
ES6中Symbol类型用法实例详解
2017/04/06 Javascript
JavaScript数据结构之广义表的定义与表示方法详解
2017/04/12 Javascript
原生JS实现的轮播图功能详解
2018/08/06 Javascript
Vue开发之封装分页组件与使用示例
2019/04/25 Javascript
[00:50]2014DOTA2国际邀请赛 NEWBEE战队回顾
2014/08/01 DOTA
[01:03:27]NAVI vs EG 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/17 DOTA
零基础写python爬虫之爬虫编写全记录
2014/11/06 Python
python实现linux下抓包并存库功能
2018/07/18 Python
Python3 获取一大段文本之间两个关键字之间的内容方法
2018/10/11 Python
flask应用部署到服务器的方法
2019/07/12 Python
pandas实现DataFrame显示最大行列,不省略显示实例
2019/12/26 Python
pytorch torchvision.ImageFolder的用法介绍
2020/02/20 Python
Django def clean()函数对表单中的数据进行验证操作
2020/07/09 Python
python实现三种随机请求头方式
2021/01/05 Python
HTML5实现无刷新修改URL的方法
2019/11/14 HTML / CSS
路德维希•贝克(LUDWIG BECK)中文官网:德国大型美妆百货
2020/09/19 全球购物
护士毕业生自荐信
2014/02/07 职场文书
《台湾的蝴蝶谷》教学反思
2014/02/20 职场文书
销售人员职业生涯规划范文
2014/03/01 职场文书
汽车维修专业自荐书
2014/05/26 职场文书
中学生运动会通讯稿大全
2014/09/18 职场文书
幼儿园推普周活动总结
2015/05/07 职场文书
民事答辩状范本
2015/05/21 职场文书
2015年办税服务厅工作总结
2015/07/23 职场文书
python编程简单几行代码实现视频转换Gif示例
2021/10/05 Python