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 相关文章推荐
php合并js请求的例子
Nov 01 PHP
php获取网卡的MAC地址支持WIN/LINUX系统
Apr 30 PHP
php版本的cron定时任务执行器使用实例
Aug 19 PHP
php+ajax实时刷新简单实例
Feb 25 PHP
php实现用手机关闭计算机(电脑)的方法
Apr 22 PHP
php eval函数一句话木马代码
May 21 PHP
php实现数组中索引关联数据转换成json对象的方法
Jul 08 PHP
使用xampp搭建运行php虚拟主机的详细步骤
Oct 21 PHP
详解PHP执行定时任务的实现思路
Dec 21 PHP
php删除数组中重复元素的方法
Dec 22 PHP
php实现socket推送技术的示例
Dec 20 PHP
php+websocket 实现的聊天室功能详解
May 27 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
在IIS7.0下面配置PHP 5.3.2运行环境的方法
2010/04/13 PHP
php采用ajax数据提交post与post常见方法总结
2014/11/10 PHP
PHP 绘制网站登录首页图片验证码
2016/04/12 PHP
给jQuery方法添加回调函数一款插件的应用
2013/01/21 Javascript
js字母大小写转换实现方法总结
2013/11/13 Javascript
jQuery插件支持同一页面被多次调用
2016/02/14 Javascript
微信小程序--onShareAppMessage分享参数用处(页面分享)
2017/04/18 Javascript
JS仿QQ好友列表展开、收缩功能(第二篇)
2017/07/07 Javascript
基于Bootstrap的标签页组件及bootstrap-tab使用说明
2017/07/25 Javascript
Vue自定义指令使用方法详解
2017/08/21 Javascript
vue-router 路由基础的详解
2017/10/17 Javascript
vue项目中使用tinymce编辑器的步骤详解
2018/09/11 Javascript
原生JS实现随机点名项目的实例代码
2019/04/30 Javascript
vue项目打包之开发环境和部署环境的实现
2020/04/23 Javascript
前端vue+elementUI如何实现记住密码功能
2020/09/20 Javascript
python基础教程之获取本机ip数据包示例
2014/02/10 Python
Python中使用items()方法返回字典元素对的教程
2015/05/21 Python
python中文乱码不着急,先看懂字节和字符
2017/12/20 Python
Sanic框架基于类的视图用法示例
2018/07/18 Python
Python查找最长不包含重复字符的子字符串算法示例
2019/02/13 Python
python分割一个文本为多个文本的方法
2019/07/22 Python
python基于K-means聚类算法的图像分割
2019/10/30 Python
python:批量统计xml中各类目标的数量案例
2020/03/10 Python
Python小白垃圾回收机制入门
2020/06/09 Python
CSS3 2D模拟实现摩天轮旋转效果
2016/11/16 HTML / CSS
Puccini乌克兰:购买行李箱、女士手袋网上商店
2020/08/06 全球购物
个性大学生自我评价
2013/12/04 职场文书
营销团队口号
2014/06/06 职场文书
女生节标语
2014/06/26 职场文书
机动车登记业务委托书
2014/10/08 职场文书
法律讲堂观后感
2015/06/11 职场文书
行政处罚决定书
2015/06/24 职场文书
初中团委工作总结
2015/08/13 职场文书
详解Redis基本命令与使用场景
2021/06/01 Redis
CSS使用SVG实现动态分布的圆环发散路径动画
2022/12/24 HTML / CSS
CSS中calc(100%-100px)不加空格不生效
2023/05/07 HTML / CSS