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 相关文章推荐
IIS php环境配置PHP5 MySQL5 ZendOptimizer phpmyadmin安装与配置
Nov 18 PHP
PHP simple_html_dom.php+正则 采集文章代码
Dec 24 PHP
jQuery 源码分析笔记
May 25 PHP
PHP session会话的安全性分析
Sep 08 PHP
php中将数组存到文件里的实现代码
Jan 19 PHP
php 批量替换html标签的实例代码
Nov 26 PHP
Windows下安装PHP单元测试环境PHPUnit图文教程
Oct 24 PHP
php绘制一条弧线的方法
Jan 24 PHP
php实现HTML实体编号与非ASCII字符串相互转换类实例
Nov 02 PHP
阿里云的WindowsServer2016上部署php+apache
Jul 17 PHP
PHP实现微信提现功能
Sep 30 PHP
php+mysql开发中的经验与常识小结
Mar 25 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实现上传图片文件代码
2015/07/19 PHP
Laravel学习教程之request validation的编写
2017/10/25 PHP
基于php解决json_encode中文UNICODE转码问题
2020/11/10 PHP
javascript实现的动态添加表单元素input,button等(appendChild)
2007/11/24 Javascript
JavaScript Tips 使用DocumentFragment加快DOM渲染速度
2010/06/28 Javascript
从零开始学习jQuery (十) jQueryUI常用功能实战
2011/02/23 Javascript
jquery 图片上传按比例预览插件集合
2011/05/28 Javascript
为指定的元素添加遮罩层的示例代码
2014/01/15 Javascript
超简单JS二级、多级联动的简单实例
2014/02/18 Javascript
Seajs的学习笔记
2014/03/04 Javascript
JavaScript中的console.assert()函数介绍
2014/12/29 Javascript
JavaScript中的数组遍历forEach()与map()方法以及兼容写法介绍
2016/05/19 Javascript
JavaScript观察者模式(publish/subscribe)原理与实现方法
2017/03/30 Javascript
Bootstrap Table使用整理(五)之分页组合查询
2017/06/09 Javascript
JS实现定时任务每隔N秒请求后台setInterval定时和ajax请求问题
2017/10/15 Javascript
基于vue-cli、elementUI的Vue超简单入门小例子(推荐)
2019/04/17 Javascript
一文了解Vue中的nextTick
2019/05/06 Javascript
Python3字符串学习教程
2015/08/20 Python
python列表的增删改查实例代码
2018/01/30 Python
Python OpenCV获取视频的方法
2018/02/28 Python
对python 命令的-u参数详解
2018/12/03 Python
解决pycharm每次新建项目都要重新安装一些第三方库的问题
2019/01/17 Python
pycharm运行scrapy过程图解
2019/11/22 Python
Python matplotlib画图时图例说明(legend)放到图像外侧详解
2020/05/16 Python
python3中for循环踩过的坑记录
2020/12/14 Python
html5将图片转换成base64的实例代码
2016/09/21 HTML / CSS
关于canvas.toDataURL 在iOS运行失败的问题解决
2020/09/16 HTML / CSS
怀俄明州飞钓:Platte River Fly Shop
2017/12/28 全球购物
英国家电购物网站:Sonic Direct
2019/03/26 全球购物
加拿大拼图大师:Puzzle Master
2020/12/28 全球购物
西班牙在线光学:Visual-Click
2020/06/22 全球购物
民间个人借款协议书
2014/09/30 职场文书
会计工作总结范文2014
2014/12/23 职场文书
mysql优化
2021/04/06 MySQL
python如何正确使用yield
2021/05/21 Python
MySQL RC事务隔离的实现
2022/03/31 MySQL