php中json_encode处理gbk与gb2312中文乱码问题的解决方法


Posted in PHP onJuly 10, 2014

本文讲述了php中json_encode处理gbk与gb2312中文乱码问题的解决方法,具体方法如下:

1.json_encode()中文在gbk/gb2312中对中文返回为null

$arr = array ( 
 array ( 
   'catid' => '4', 
   'catname' => '3water.com', 
   'meta_title' => '三水点靠木' 
  )
);
 
echo json_encode($arr);

运行结果:

[{"catid":"4","catname":"3water.com","meta_title":null}]

看一了吗"meta_title":null 他本来是有一个值的为"三水点靠木"了,这个我们查了一下原理是json_encode只支持uft-8编码,我们转换一下
 

<?php
$data="JSON中文";
$newData=iconv("GB2312″,"UTF-8//IGNORE",$data);
echo $newData;
//ignore的意思是忽略转换时的错误,如果没有ignore参数,所有该字符后面的字符都不会被保存。
//或是("GB2312″,"UTF-8″,$data);
?>

2.后台PHP页面(页面编码为UTF-8或者已经把字符转为UTF-8)使用json_encode将PHP中的array数组转为JSON字符串。例如:

<?php
$testJSON=array('name'=>'中文字符串','value'=>'test');
echo json_encode($testJSON);
?>

查看输出结果为:

{"name":"u4e2du6587u5b57u7b26u4e32″,"value":"test"}

可见即使用UTF8编码的字符,使用json_encode也出现了中文乱码。解决办法是在使用json_encode之前把字符用函数urlencode()处理一下,然后再json_encode,输出结果的时候再用函数urldecode()转回来。具体如下:

<?php
$testJSON=array('name'=>'中文字符串','value'=>'test');
//echo json_encode($testJSON);
foreach ( $testJSON as $key => $value ) {
$testJSON[$key] = urlencode ( $value );
}
echo urldecode ( json_encode ( $testJSON ) );
?>

查看输出结果为:

{"name":"中文字符串","value":"test"}

总结:json_encode函数只能处理uft8字符串,如果是中文估计是对字节处理不好,因为中文gbk与uft长度是不一样的,这个也不做深入介绍了。

PHP 相关文章推荐
如何删除多级目录
Oct 09 PHP
PHP4.04简明安装
Oct 09 PHP
在PHP中执行系统外部命令
Oct 09 PHP
php分页函数完整实例代码
Sep 22 PHP
php模拟服务器实现autoindex效果的方法
Mar 10 PHP
PHP Streams(流)详细介绍及使用
May 12 PHP
php远程下载类分享
Apr 13 PHP
PHP里面把16进制的图片数据显示在html的img标签上(实现方法)
May 02 PHP
php递归函数怎么用才有效
Feb 24 PHP
yii2中关于加密解密的那些事儿
Jun 12 PHP
PHP中非常有用却鲜有人知的函数集锦
Aug 17 PHP
PHP 实现 WebSocket 协议原理与应用详解
Apr 22 PHP
PHP5.3与5.5废弃与过期函数整理汇总
Jul 10 #PHP
ThinkPHP标签制作教程
Jul 10 #PHP
YII路径的用法总结
Jul 09 #PHP
YII实现分页的方法
Jul 09 #PHP
YII模块实现绑定二级域名的方法
Jul 09 #PHP
yii操作cookie实例简介
Jul 09 #PHP
Yii调试SQL的常用方法
Jul 09 #PHP
You might like
php FPDF类库应用实现代码
2009/03/20 PHP
PHP采集腾讯微博的实现代码
2012/01/19 PHP
遨游,飞飞,IE,空中网 浏览器无提示关闭方法
2011/07/11 Javascript
JavaScript 参数中的数组展开 [译]
2012/09/21 Javascript
jquery实现div阴影效果示例代码
2013/09/16 Javascript
深入理解JavaScript系列(36):设计模式之中介者模式详解
2015/03/04 Javascript
使用C++为node.js写扩展模块
2015/04/22 Javascript
Bootstrap每天必学之导航组件
2016/04/25 Javascript
纯前端JavaScript实现Excel IO案例分享
2016/08/26 Javascript
AngularJs Injecting Services Into Controllers详解
2016/09/02 Javascript
AngularJS Controller作用域
2017/01/09 Javascript
Angularjs上传图片实例详解
2017/08/06 Javascript
解决vue热替换失效的根本原因
2018/09/19 Javascript
解决vue语法会有延迟加载显现{{xxx}}的问题
2019/11/14 Javascript
vue a标签点击实现赋值方式
2020/09/07 Javascript
Vue仿百度搜索功能
2020/12/28 Vue.js
[50:58]2018DOTA2亚洲邀请赛3月29日 小组赛A组OpTic VS Newbee
2018/03/30 DOTA
Python中的Matplotlib模块入门教程
2015/04/15 Python
Python使用django获取用户IP地址的方法
2015/05/11 Python
使用python加密自己的密码
2015/08/04 Python
tensorflow: 查看 tensor详细数值方法
2018/06/13 Python
python如何以表格形式打印输出的方法示例
2019/06/21 Python
Python切割图片成九宫格的示例代码
2020/03/10 Python
python 识别登录验证码图片功能的实现代码(完整代码)
2020/07/03 Python
详解canvas drawImage()方法绘制图片不显示的问题
2018/10/08 HTML / CSS
GNC健安喜美国官网:美国第一营养品牌
2016/07/22 全球购物
英国工艺品购物网站:Minerva Crafts
2018/01/29 全球购物
享受加州生活方式的时尚舒适:XCVI
2018/07/09 全球购物
新加坡网上美容店:Hermo新加坡
2019/06/19 全球购物
应用电子技术专业个人求职信
2013/09/21 职场文书
计算机应用专业学生的自我评价分享
2013/11/03 职场文书
财务管理专业自荐信范文
2013/12/24 职场文书
档案保密承诺书
2014/06/03 职场文书
高校群众路线教育实践活动剖析材料
2014/10/10 职场文书
判缓刑人员个人思想汇报
2014/10/10 职场文书
让生命充满爱观后感
2015/06/08 职场文书