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 无限极分类
Mar 27 PHP
PHP setcookie指定domain参数后,在IE下设置cookie失效的解决方法
Sep 09 PHP
php之XML转数组函数的详解
Jun 07 PHP
PHP设计模式之责任链模式的深入解析
Jun 13 PHP
FireFox浏览器使用Javascript上传大文件
Oct 30 PHP
php批量删除数据库下指定前缀的表以prefix_为例
Aug 24 PHP
PHP与MYSQL中UTF8 中文排序示例代码
Oct 23 PHP
php使用cookie实现记住用户名和密码实现代码
Apr 27 PHP
Thinkphp关闭缓存的方法
Jun 26 PHP
php无序树实现方法
Jul 28 PHP
CI框架整合widget(页面格局)的方法
May 17 PHP
基于laravel缓冲cache的用法详解
Oct 23 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以及MYSQL日期比较方法
2012/11/29 PHP
使用Linux五年积累的一些经验技巧
2013/06/20 PHP
php+ajax实现无刷新文件上传功能(ajaxuploadfile)
2018/02/11 PHP
PDO::getAvailableDrivers讲解
2019/01/28 PHP
jquery text()要注意啦
2009/10/30 Javascript
基于JQuery的日期联动实现代码
2011/02/24 Javascript
Tab页界面 用jQuery及Ajax技术实现(php后台)
2011/10/12 Javascript
fancybox modal的完美解决(右上的X)
2012/10/30 Javascript
jQuery-serialize()输出序列化form表单值的方法
2012/12/26 Javascript
jQuery之自动完成组件的深入解析
2013/06/19 Javascript
jquery实现侧边弹出的垂直导航
2014/12/09 Javascript
javascript实现客户端兼容各浏览器创建csv并下载的方法
2015/03/23 Javascript
浅谈JavaScript中的Math.atan()方法的使用
2015/06/14 Javascript
javascript去掉代码里面的注释
2015/07/24 Javascript
BootStrap中Datepicker控件带中文的js文件
2016/08/10 Javascript
微信小程序页面间通信的5种方式
2017/03/31 Javascript
vue.js组件vue-waterfall-easy实现瀑布流效果
2017/08/22 Javascript
vue router 用户登陆功能的实例代码
2019/04/24 Javascript
深入浅析golang zap 日志库使用(含文件切割、分级别存储和全局使用等)
2020/02/19 Javascript
react antd表格中渲染一张或多张图片的实例
2020/10/28 Javascript
JavaScript Html实现移动端红包雨功能页面
2021/01/10 Javascript
[01:52]2014DOTA2西雅图邀请赛 V社开大会你不知道的小秘密
2014/07/08 DOTA
详解Python3的TFTP文件传输
2018/06/26 Python
Tensorflow分类器项目自定义数据读入的实现
2019/02/05 Python
django中forms组件的使用与注意
2019/07/08 Python
python的debug实用工具 pdb详解
2019/07/12 Python
python经典趣味24点游戏程序设计
2019/07/26 Python
Python socket聊天脚本代码实例
2020/01/02 Python
keras的三种模型实现与区别说明
2020/07/03 Python
大学共青团员个人自我评价
2014/04/16 职场文书
房屋租房协议书范本
2014/12/04 职场文书
委托公证书格式
2015/01/26 职场文书
优秀教师工作总结2015
2015/07/22 职场文书
PyTorch 如何自动计算梯度
2021/05/23 Python
springboot中rabbitmq实现消息可靠性机制详解
2021/09/25 Java/Android
PostGIS的安装与入门使用指南
2022/01/18 PostgreSQL