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 相关文章推荐
php5数字型字符串加解密代码
Apr 24 PHP
PHP 的ArrayAccess接口 像数组一样来访问你的PHP对象
Oct 12 PHP
优化PHP程序的方法小结
Feb 23 PHP
解析PHP SPL标准库的用法(遍历目录,查找固定条件的文件)
Jun 18 PHP
php使用pdo连接mssql server数据库实例
Dec 25 PHP
php函数连续调用实例分析
Jul 30 PHP
PHP+AJAX实现投票功能的方法
Sep 28 PHP
利用Fix Rss Feeds插件修复WordPress的Feed显示错误
Dec 19 PHP
PHP+Ajax实现无刷新分页实例详解(附demo源码下载)
Apr 07 PHP
php 使用curl模拟登录人人(校内)网的简单实例
Jun 06 PHP
windows 2008r2+php5.6.28环境搭建详细过程
Jun 18 PHP
PHP中Session ID的实现原理实例分析
Aug 17 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基础学习笔记
2007/03/18 PHP
PHP 杂谈《重构-改善既有代码的设计》之四 简化条件表达式
2012/04/09 PHP
php实现session自定义会话处理器的方法
2015/01/27 PHP
JavaScript instanceof 的使用方法示例介绍
2013/10/23 Javascript
JS,Jquery获取select,dropdownlist,checkbox下拉列表框的值(示例代码)
2014/01/11 Javascript
JavaScript中的立即执行函数表达式介绍
2015/03/15 Javascript
浅析函数声明和函数表达式——函数声明的声明提前
2016/05/03 Javascript
在javascript中使用com组件的简单实现方法
2016/08/17 Javascript
js本地图片预览实现代码
2016/10/09 Javascript
微信小程序 input输入框控件详解及实例(多种示例)
2016/12/14 Javascript
Vue.js双向绑定操作技巧(初级入门)
2016/12/27 Javascript
详解Vue组件之间的数据通信实例
2017/06/17 Javascript
20行js代码实现的贪吃蛇小游戏
2017/06/20 Javascript
Vue2.0点击切换类名改变样式的方法
2018/08/22 Javascript
angular1.x ui-route传参的三种写法小结
2018/08/31 Javascript
Vue+Element实现网页版个人简历系统(推荐)
2019/12/31 Javascript
[05:05]第三天的dota2
2013/07/29 DOTA
python中字典dict常用操作方法实例总结
2015/04/04 Python
5个很好的Python面试题问题答案及分析
2018/01/19 Python
python创建文件备份的脚本
2018/09/11 Python
详解python使用pip安装第三方库(工具包)速度慢、超时、失败的解决方案
2018/12/02 Python
Python中整数的缓存机制讲解
2019/02/16 Python
详解python实现小波变换的一个简单例子
2019/07/18 Python
python+OpenCV实现车牌号码识别
2019/11/08 Python
详解python常用命令行选项与环境变量
2020/02/20 Python
python数据抓取3种方法总结
2021/02/07 Python
介绍一下linux文件系统分配策略
2013/02/25 面试题
化学专业毕业生自荐信
2013/11/15 职场文书
大型车展策划方案
2014/02/01 职场文书
护士自我评价
2014/02/01 职场文书
群众对十八届四中全会的期盼
2014/10/17 职场文书
2014年生产部工作总结
2014/12/17 职场文书
原来闭幕词是这样写的呀!
2019/07/01 职场文书
解决Nginx 配置 proxy_pass 后 返回404问题
2021/03/31 Servers
Pytorch 如何实现常用正则化
2021/05/27 Python
只用40行Python代码就能写出pdf转word小工具
2021/05/31 Python