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 相关文章推荐
第五节--克隆
Nov 16 PHP
PHP 读取和修改大文件的某行内容的代码
Oct 30 PHP
CURL状态码列表(详细)
Jun 27 PHP
如何让thinkphp在模型中自动完成session赋值小教程
Sep 05 PHP
php中实现记住密码下次自动登录的例子
Nov 06 PHP
yii添删改查实例
Nov 16 PHP
WordPress中给媒体文件添加分类和标签的PHP功能实现
Dec 31 PHP
PHP流Streams、包装器wrapper概念与用法实例详解
Nov 17 PHP
php将从数据库中获得的数据转换成json格式并输出的方法
Aug 21 PHP
PHP常见的序列化与反序列化操作实例分析
Oct 28 PHP
Laravel 验证码认证学习记录小结
Dec 20 PHP
解决php用mysql方式连接数据库出现Deprecated报错问题
Dec 25 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
mysql 查询指定日期时间内sql语句实现原理与代码
2012/12/16 PHP
thinkphp 中的volist标签在ajax操作中的特殊性(推荐)
2018/01/15 PHP
php使用pthreads v3多线程实现抓取新浪新闻信息操作示例
2020/02/21 PHP
JavaScript中使用typeof运算符需要注意的几个坑
2014/11/08 Javascript
JavaScript插件化开发教程 (二)
2015/01/27 Javascript
js实现向右横向滑出的二级菜单效果
2015/08/27 Javascript
jQuery 3.0十大新特性最终版发布
2016/07/14 Javascript
浅析location.href跨窗口调用函数
2016/11/22 Javascript
Bootstrap CSS布局之表格
2016/12/17 Javascript
css和js实现弹出登录居中界面完整代码
2017/11/26 Javascript
Vue调试神器vue-devtools安装方法
2017/12/12 Javascript
webpack引入eslint配置详解
2018/01/22 Javascript
jQuery zTree搜索-关键字查询 递归无限层功能实现代码
2018/01/25 jQuery
p5.js入门教程之鼠标交互的示例
2018/03/16 Javascript
vue实现pdf导出解决生成canvas模糊等问题(推荐)
2018/10/18 Javascript
js实现通过开始结束控制的计时器
2019/02/25 Javascript
vue组件间的参数传递实例详解
2019/04/26 Javascript
详解js常用分割取字符串的方法
2019/05/15 Javascript
JavaScript中使用Spread运算符的八种方法总结
2020/06/18 Javascript
vue pages 多入口项目 + chainWebpack 全局引用缩写说明
2020/09/21 Javascript
如何通过JS实现日历简单算法
2020/10/14 Javascript
Python中模拟enum枚举类型的5种方法分享
2014/11/22 Python
Python 40行代码实现人脸识别功能
2017/04/02 Python
让代码变得更易维护的7个Python库
2018/10/09 Python
Python创建或生成列表的操作方法
2019/06/19 Python
python3中利用filter函数输出小于某个数的所有回文数实例
2019/11/24 Python
python支持多线程的爬虫实例
2019/12/21 Python
python基于爬虫+django,打造个性化API接口
2021/01/21 Python
吃透移动端 Html5 响应式布局
2019/12/16 HTML / CSS
全球虚拟主机商:HostGator
2017/02/06 全球购物
SQL Server 2000数据库的文件有哪些,分别进行描述
2013/03/30 面试题
特色冷饮店创业计划书
2014/01/28 职场文书
公务员综合考察材料
2014/02/01 职场文书
演讲稿的写法
2014/05/19 职场文书
html+css实现文字折叠特效实例
2021/06/02 HTML / CSS
python 镜像环境搭建总结
2022/09/23 Python