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生成HTML静态页面实例代码
Aug 31 PHP
PHP 单引号与双引号的区别
Nov 24 PHP
mysql总结之explain
Feb 27 PHP
用PHP实现弹出消息提示框的两种方法
Dec 17 PHP
PHP获取短链接跳转后的真实地址和响应头信息的方法
Jul 25 PHP
PHP中使用json数据格式定义字面量对象的方法
Aug 20 PHP
PHP实现递归无限级分类
Oct 22 PHP
深入理解PHP中的count函数
May 31 PHP
完美解决thinkphp唯一索引重复时出错的问题
Mar 31 PHP
php实现留言板功能(会话控制)
May 23 PHP
php实现的PDO异常处理操作分析
Dec 27 PHP
PHP实现微信公众号验证Token的示例代码
Dec 16 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 ftp文件上传函数(基础版)
2010/06/03 PHP
教你php如何实现验证码
2016/01/20 PHP
PHP实现压缩图片尺寸并转为jpg格式的方法示例
2018/05/10 PHP
laravel框架中路由设置,路由参数和路由命名实例分析
2019/11/23 PHP
JavaScript Array扩展实现代码
2009/10/14 Javascript
javascript alert乱码的解决方法
2013/11/05 Javascript
用js编写的简单的计算器代码程序
2015/08/04 Javascript
javascript返回顶部的按钮实现方法
2016/01/09 Javascript
jQuery实现横向带缓冲的水平运动效果(附demo源码下载)
2016/01/29 Javascript
jquery ztree实现模糊搜索功能
2016/02/25 Javascript
AngularJS入门教程之静态模板详解
2016/08/18 Javascript
微信小程序 简单DEMO布局,逻辑,样式的练习
2016/11/30 Javascript
使用AngularJS2中的指令实现按钮的切换效果
2017/03/27 Javascript
浅谈 vue 中的 watcher
2017/12/04 Javascript
JS对象与json字符串相互转换实现方法示例
2018/06/14 Javascript
详解VS Code使用之Vue工程配置format代码格式化
2019/03/20 Javascript
jQuery单页面文字搜索插件jquery.fullsearch.js的使用方法
2020/02/04 jQuery
Nuxt.js nuxt-link与router-link的区别说明
2020/11/06 Javascript
[01:04:39]OG vs Mineski 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/18 DOTA
Windows下用py2exe将Python程序打包成exe程序的教程
2015/04/08 Python
Python的函数的一些高阶特性
2015/04/27 Python
Python压缩解压缩zip文件及破解zip文件密码的方法
2015/11/04 Python
Python3实现购物车功能
2018/04/18 Python
Python计算信息熵实例
2020/06/18 Python
如何让PyQt5中QWebEngineView与JavaScript交互
2020/10/21 Python
python 利用matplotlib在3D空间中绘制平面的案例
2021/02/06 Python
分享一个页面平滑滚动小技巧(推荐)
2019/10/23 HTML / CSS
竞争上岗演讲稿
2014/01/05 职场文书
《石榴》教学反思
2014/03/02 职场文书
学前班评语大全
2014/05/04 职场文书
美术专业自荐信
2014/07/07 职场文书
以权谋私检举信范文
2015/03/02 职场文书
同学会感言
2015/07/30 职场文书
Python 如何实现文件自动去重
2021/06/02 Python
Python数据可视化之用Matplotlib绘制常用图形
2021/06/03 Python
浅谈Vue的computed计算属性
2022/03/21 Vue.js