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 截取字符串 分别适合GB2312和UTF8编码情况
Feb 12 PHP
如何阻止网站被恶意反向代理访问(防网站镜像)
Mar 18 PHP
PHP源码分析之变量的存储过程分解
Jul 03 PHP
php上传图片之时间戳命名(保存路径)
Aug 15 PHP
javascript数组与php数组的地址传递及值传递用法实例
Jan 22 PHP
PHP获得数组交集与差集的方法
Jun 10 PHP
基于PHP实现等比压缩图片大小
Mar 04 PHP
PHP进程通信基础之信号量与共享内存通信
Feb 19 PHP
浅谈php(codeigniter)安全性注意事项
Apr 06 PHP
用PHP去掉文件头的Unicode签名(BOM)方法
Jun 22 PHP
PHP设计模式之抽象工厂模式实例分析
Mar 25 PHP
PHP dirname简单使用代码实例
Nov 13 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
JAVA/JSP学习系列之七
2006/10/09 PHP
如何使用PHP计算上一个月的今天
2013/05/23 PHP
php用户注册页面利用js进行表单验证具体实例
2013/10/17 PHP
PHP运行SVN命令显示某用户的文件更新记录的代码
2014/01/03 PHP
thinkPHP2.1自定义标签库的导入方法详解
2016/07/20 PHP
索趣科技的答案
2007/02/07 Javascript
指定js可访问其它域名的cookie的方法
2007/09/18 Javascript
jquery无缝向上滚动实现代码
2013/03/29 Javascript
js调用图片隐藏&amp;显示实现代码
2013/09/13 Javascript
confirm的用法示例用于按钮操作时确定是否执行
2014/06/19 Javascript
编写高质量JavaScript代码的基本要点
2016/03/02 Javascript
Javascript中关于Array.filter()的妙用详解
2016/12/04 Javascript
jQuery多选框选择数量限制方法
2017/02/08 Javascript
Vue.js做select下拉列表的实例(ul-li标签仿select标签)
2018/03/02 Javascript
微信小程序实现留言板(Storage)
2018/11/02 Javascript
解决iview多表头动态更改列元素发生的错误的方法
2018/11/02 Javascript
nodejs中各种加密算法的实现详解
2019/07/11 NodeJs
使用JS来动态操作css的几种方法
2019/12/18 Javascript
Vue 实现显示/隐藏层的思路(加全局点击事件)
2019/12/31 Javascript
Bootstrap实现前端登录页面带验证码功能完整示例
2020/03/26 Javascript
wxPython学习之主框架实例
2014/09/28 Python
Python发送邮件测试报告操作实例详解
2018/12/08 Python
python调用matplotlib模块绘制柱状图
2019/10/18 Python
pytorch中使用cuda扩展的实现示例
2020/02/12 Python
Under Armour瑞典官方网站:美国高端运动科技品牌
2018/11/21 全球购物
abstract 可以和 virtual 一起使用吗?可以和 override 一起使用吗?
2012/10/15 面试题
学生安全承诺书
2014/05/22 职场文书
银行纠风工作实施方案
2014/06/08 职场文书
地理信息科学专业推荐信
2014/09/08 职场文书
学习心理学的体会
2014/11/07 职场文书
2015年酒店年度工作总结
2015/05/23 职场文书
驾驶员安全责任协议书
2016/03/22 职场文书
读《瓦尔登湖》有感:每个人都需要一个瓦尔登湖
2019/10/17 职场文书
用python开发一款操作MySQL的小工具
2021/05/12 Python
Windows11插耳机没反应怎么办? win11耳机没声音的多种解决办法
2021/11/21 数码科技
教你修复 Win11应用商店加载空白问题
2021/12/06 数码科技