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 相关文章推荐
第三节--定义一个类
Nov 16 PHP
PHP网站安装程序制作的原理、步骤、注意事项和示例代码
Aug 01 PHP
php URL跳转代码 减少外链
Jun 25 PHP
基于MySQL体系结构的分析
May 02 PHP
php环境下利用session防止页面重复刷新的具体实现
Jan 09 PHP
thinkPHP中多维数组的遍历方法
Jan 09 PHP
php session实现多级目录存放实现代码
Feb 03 PHP
php实现将HTML页面转换成word并且保存的方法
Oct 14 PHP
php读取出一个文件夹及其子文件夹下所有文件的方法示例
Jun 15 PHP
Laravel使用Queue队列的技巧汇总
Sep 02 PHP
laravel-admin自动生成模块,及相关基础配置方法
Oct 08 PHP
PHP 对接美团大众点评团购券(门票)的开发步骤
Apr 03 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
第九节--绑定
2006/11/16 PHP
Symfony2在Nginx下的配置方法图文教程
2016/02/04 PHP
php用户登录之cookie信息安全分析
2016/05/13 PHP
php中通过eval实现字符串格式的计算公式
2017/03/18 PHP
JavaScript的Date()方法使用详解
2015/06/09 Javascript
直接拿来用的页面跳转进度条JS实现
2016/01/06 Javascript
通过node-mysql搭建Windows+Node.js+MySQL环境的教程
2016/03/01 Javascript
JavaScript中解决多浏览器兼容性23个问题的快速解决方法
2016/05/19 Javascript
JS实现鼠标滑过显示边框的菜单效果
2016/09/21 Javascript
JS实现简易刻度时钟示例代码
2017/03/11 Javascript
微信小程序 chooseImage选择图片或者拍照
2017/04/07 Javascript
angularjs项目的页面跳转如何实现(5种方法)
2017/05/25 Javascript
jQuery+ajax实现局部刷新的两种方法
2017/06/08 jQuery
使用Bootstrap和Vue实现用户信息的编辑删除功能
2017/10/25 Javascript
JavaScript使用ul中li标签实现删除效果
2019/04/15 Javascript
详解element-ui级联菜单(城市三级联动菜单)和回显问题
2019/10/02 Javascript
JavaScript算法学习之冒泡排序和选择排序
2019/11/02 Javascript
小程序按钮避免多次调用接口和点击方案实现(不用showLoading)
2020/04/15 Javascript
浅谈React中组件逻辑复用的那些事儿
2020/05/21 Javascript
vue实现div单选多选功能
2020/07/16 Javascript
原生js canvas实现鼠标跟随效果
2020/08/02 Javascript
[01:19:46]EG vs Secret 2019国际邀请赛淘汰赛 胜者组 BO3 第二场 8.21.mp4
2020/07/19 DOTA
Pandas中把dataframe转成array的方法
2018/04/13 Python
python高效过滤出文件夹下指定文件名结尾的文件实例
2018/10/21 Python
用Python和WordCloud绘制词云的实现方法(内附让字体清晰的秘笈)
2019/01/08 Python
Python爬取数据保存为Json格式的代码示例
2019/04/09 Python
我们为什么要减少Python中循环的使用
2019/07/10 Python
Python 项目转化为so文件实例
2019/12/23 Python
python设置表格边框的具体方法
2020/07/17 Python
html5+css3之制作header实例与更新
2020/12/21 HTML / CSS
美术教师自我鉴定
2014/02/12 职场文书
2014国庆节主题活动方案:快乐的国庆节
2014/09/16 职场文书
法定代表人证明书
2014/11/28 职场文书
创业计划书之川味火锅店
2019/09/02 职场文书
Redis可视化客户端小结
2021/06/10 Redis
MySQL和Oracle批量插入SQL的通用写法示例
2021/11/17 MySQL