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提取字符串中的图片地址[正则表达式]
Nov 12 PHP
PHP mysql与mysqli事务使用说明 分享
Aug 17 PHP
非常好用的Zend Framework分页类
Jun 25 PHP
为PHP安装imagick时出现Cannot locate header file MagickWand.h错误的解决方法
Nov 03 PHP
thinkphp微信开之安全模式消息加密解密不成功的解决办法
Dec 02 PHP
CodeIgniter扩展核心类实例详解
Jan 20 PHP
浅谈PHP中静态方法和非静态方法的相互调用
Oct 04 PHP
Yii框架防止sql注入,xss攻击与csrf攻击的方法
Oct 18 PHP
使用laravel和ajax实现整个页面无刷新的操作方法
Oct 03 PHP
laravel excel 上传文件保存到本地服务器功能
Nov 14 PHP
PHP超全局变量实现原理及代码解析
Sep 01 PHP
PHP7 新增常量
Mar 09 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中操作Excel实例代码
2010/04/29 PHP
php获取新浪微博数据API实例
2013/11/12 PHP
PHP IDE PHPStorm配置支持友好Laravel代码提示方法
2015/05/12 PHP
PHP判断文件是否被引入的方法get_included_files用法示例
2016/11/29 PHP
PHP filesize函数用法浅析
2019/02/15 PHP
Yii2.0框架behaviors方法使用实例分析
2019/09/30 PHP
Javascript中的var_dump函数实现代码
2009/09/07 Javascript
js+css实现上下翻页相册代码分享
2015/08/18 Javascript
jQuery实现连续动画效果实例分析
2015/10/09 Javascript
jQuery使用Selectator插件实现多选下拉列表过滤框(附源码下载)
2016/04/08 Javascript
微信小程序实现流程进度的图样式功能
2018/01/16 Javascript
JS中常用的消息框总结
2018/02/24 Javascript
Koa项目搭建过程详细记录
2018/04/12 Javascript
详解Vue Elementui中的Tag与页面其它元素相互交互的两三事
2018/09/25 Javascript
Vue 实现手动刷新组件的方法
2019/02/19 Javascript
微信小程序中为什么使用var that=this
2019/08/27 Javascript
[01:34]2014DOTA2 TI预选赛预选赛 选手比赛房大揭秘!
2014/05/20 DOTA
[36:52]DOTA2真视界:基辅特锦赛总决赛
2017/05/21 DOTA
[47:43]完美世界DOTA2联赛PWL S3 Magama vs GXR 第二场 12.19
2020/12/24 DOTA
Python性能优化的20条建议
2014/10/25 Python
用Python代码来解图片迷宫的方法整理
2015/04/02 Python
python实现矩阵乘法的方法
2015/06/28 Python
Python实现二叉堆
2016/02/03 Python
python3.4用函数操作mysql5.7数据库
2017/06/23 Python
python 实现一个贴吧图片爬虫的示例
2017/10/12 Python
Python PyAutoGUI模块控制鼠标和键盘实现自动化任务详解
2018/09/04 Python
python对日志进行处理的实例代码
2018/10/06 Python
python实现字符串完美拆分split()的方法
2019/07/16 Python
python Kmeans算法原理深入解析
2019/08/23 Python
python使用if语句实现一个猜拳游戏详解
2019/08/27 Python
班级入场式解说词
2014/02/01 职场文书
信电学院毕业生自荐书
2014/05/24 职场文书
2015年端午节活动总结
2015/02/11 职场文书
2015年119消防宣传日活动总结
2015/03/24 职场文书
农村党员干部承诺书
2015/05/04 职场文书
Python-OpenCV教程之图像的位运算详解
2021/06/21 Python