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 相关文章推荐
一个简单的自动发送邮件系统(二)
Oct 09 PHP
PHP5.4中json_encode中文转码的变化小结
Jan 30 PHP
基于MySQL体系结构的分析
May 02 PHP
Window下PHP三种运行方式图文详解
Jun 11 PHP
PHP读取文件内容后清空文件示例代码
Mar 18 PHP
教你如何解密 “ PHP 神盾解密工具 ”
Jun 20 PHP
PHP命令行脚本接收传入参数的三种方式
Aug 20 PHP
调试PHP程序的多种方法介绍
Nov 06 PHP
PHP PDO fetch 模式各种参数的输出结果一览
Jan 07 PHP
php实现俄罗斯乘法实例
Mar 07 PHP
CentOS 安装 PHP5.5+Redis+XDebug+Nginx+MySQL全纪录
Mar 25 PHP
PHP 数组黑名单/白名单实例代码详解
Jun 04 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
PHPMYADMIN导入数据最大为2M的解决方法
2012/04/23 PHP
PHP系列学习之日期函数使用介绍
2012/08/18 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(六)
2014/06/23 PHP
Django 中 cookie的使用
2017/08/17 PHP
PHP dirname功能及原理实例解析
2020/10/28 PHP
javascript css styleFloat和cssFloat
2010/03/15 Javascript
jQuery弹出层始终垂直居中相对于屏幕或当前窗口
2013/04/01 Javascript
子窗体与父窗体传值示例js代码
2013/08/01 Javascript
js身份证判断方法支持15位和18位
2014/03/18 Javascript
js实现鼠标触发图片抖动效果的方法
2015/02/27 Javascript
JavaScript获取页面中第一个锚定文本的方法
2015/04/03 Javascript
javascript 判断是否是微信浏览器的方法
2016/10/09 Javascript
给easyui datebox扩展一个清空的实例
2016/11/09 Javascript
Bootstrap table使用方法详细介绍
2016/12/09 Javascript
jQuery、zepto、js常用小技巧
2017/02/12 Javascript
js中toString()和String()区别详解
2017/03/23 Javascript
解决vue 更改计算属性后select选中值不更改的问题
2018/03/02 Javascript
js数组去重的N种方法(小结)
2018/06/07 Javascript
Vue项目全局配置页面缓存之按需读取缓存的实现详解
2018/08/01 Javascript
详解JavaScript中精度失准问题及解决方法
2020/02/04 Javascript
javascript设计模式 ? 享元模式原理与用法实例分析
2020/04/15 Javascript
使用Python3 编写简单信用卡管理程序
2016/12/21 Python
CentOS 7下安装Python 3.5并与Python2.7兼容并存详解
2017/07/07 Python
python看某个模块的版本方法
2018/10/16 Python
在Mac下使用python实现简单的目录树展示方法
2018/11/01 Python
python实现简单日志记录库glog的使用
2019/12/13 Python
Python 自由定制表格的实现示例
2020/03/20 Python
python获取本周、上周、本月、上月及本季的时间代码实例
2020/09/08 Python
CSS3 网页下拉菜单代码解释 中文翻译
2010/02/27 HTML / CSS
欧洲最大的美妆零售网站:Feelunique
2017/01/14 全球购物
英国厨房与餐具用品为主的设计品牌:Joseph Joseph
2018/04/26 全球购物
青年安全生产示范岗事迹材料
2014/05/04 职场文书
防汛通知
2015/04/25 职场文书
时尚女魔头观后感
2015/06/04 职场文书
2015暑假社会调查报告
2015/07/13 职场文书
Python tensorflow卷积神经Inception V3网络结构
2022/05/06 Python