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中利用XML技术构造远程服务(下)
Oct 09 PHP
smarty实例教程
Nov 19 PHP
php获取mysql数据库中的所有表名的代码
Apr 23 PHP
PHP中用hash实现的数组
Jul 17 PHP
比较discuz和ecshop的截取字符串函数php版
Sep 03 PHP
邮箱正则表达式实现代码(针对php)
Jun 21 PHP
php中的strpos使用示例
Feb 27 PHP
PHP中使用CURL模拟登录并获取数据实例
Jul 01 PHP
php使用Jpgraph绘制3D饼状图的方法
Jun 10 PHP
php无限级分类实现评论及回复功能
Feb 18 PHP
PHP的介绍以及优势详细分析
Sep 05 PHP
php实现映射操作实例详解
Oct 02 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将字符串转化成date存入数据库的两种方式
2014/04/28 PHP
php ci框架中加载css和js文件失败的原因及解决方法
2014/07/29 PHP
深入解析PHP的Yii框架中的event事件机制
2016/03/17 PHP
PHP MVC框架skymvc支持多文件上传
2016/05/26 PHP
详解使用php调用微信接口上传永久素材
2017/04/11 PHP
利用Homestead快速运行一个Laravel项目的方法详解
2017/11/14 PHP
jQuery-Easyui 1.2 实现多层菜单效果的代码
2012/01/13 Javascript
jquery中$(#form :input)与$(#form input)的区别
2014/08/18 Javascript
jQuery 处理页面的事件详解
2015/01/20 Javascript
jQuery基于函数重载实现自定义Alert函数样式的方法
2016/07/27 Javascript
jQuery获取select选中的option的value值实现方法
2016/08/29 Javascript
layui.js实现的表单验证功能示例
2017/11/15 Javascript
jquery 实现拖动文件上传加载进度条功能
2018/03/18 jQuery
JS获取月的第几周和年的第几周实例代码
2018/12/05 Javascript
vue实现购物车选择功能
2020/01/10 Javascript
python登录QQ邮箱发信的实现代码
2013/02/10 Python
用python + hadoop streaming 分布式编程(一) -- 原理介绍,样例程序与本地调试
2014/07/14 Python
Python中变量交换的例子
2014/08/25 Python
使用Python脚本对Linux服务器进行监控的教程
2015/04/02 Python
python同时给两个收件人发送邮件的方法
2015/04/30 Python
python制作最美应用的爬虫
2015/10/28 Python
使用python读取csv文件快速插入数据库的实例
2018/06/21 Python
Django框架多表查询实例分析
2018/07/04 Python
用python打开摄像头并把图像传回qq邮箱(Pyinstaller打包)
2020/05/17 Python
Python matplotlib图例放在外侧保存时显示不完整问题解决
2020/07/28 Python
详解Python中第三方库Faker
2020/09/25 Python
Python如何急速下载第三方库详解
2020/11/02 Python
CSS3中各种颜色属性的使用教程
2016/05/17 HTML / CSS
德国童装购物网站:NICKI´S.com
2018/04/20 全球购物
Lancer Skincare官方网站:抗衰老皮肤护理
2020/11/20 全球购物
致跳高运动员广播稿
2014/01/13 职场文书
软件测试专业推荐信
2014/09/18 职场文书
2014最新实习证明模板
2014/10/02 职场文书
质量负责人岗位职责
2015/02/15 职场文书
债务追讨律师函
2015/06/24 职场文书
MySQL为数据表建立索引的原则详解
2022/03/03 MySQL