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版(1)
Oct 09 PHP
php统计文件大小,以GB、MB、KB、B输出
May 29 PHP
解析阿里云ubuntu12.04环境下配置Apache+PHP+PHPmyadmin+MYsql
Jun 26 PHP
codeigniter教程之上传视频并使用ffmpeg转flv示例
Feb 13 PHP
php管理nginx虚拟主机shell脚本实例
Nov 19 PHP
php三种实现多线程类似的方法
Oct 30 PHP
简单了解WordPress开发中update_option()函数的用法
Jan 11 PHP
thinkPHP中钩子的两种配置调用方法详解
Nov 11 PHP
PHP cookie,session的使用与用户自动登录功能实现方法分析
Jun 05 PHP
PHP实现批量修改文件名的方法示例
Sep 18 PHP
php扩展开发入门demo示例
Sep 23 PHP
用php实现分页效果的示例代码
Dec 10 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
不用数据库的多用户文件自由上传投票系统(3)
2006/10/09 PHP
Windows2003 下 MySQL 数据库每天自动备份
2006/12/21 PHP
smarty模板中拼接字符串的方法
2014/02/14 PHP
php与Mysql的一些简单的操作
2015/02/26 PHP
Zend Framework连接Mysql数据库实例分析
2016/03/19 PHP
javascript  Error 对象 错误处理
2008/05/18 Javascript
jQuery与其它库冲突的解决方法
2010/06/25 Javascript
jQuery ajax 路由和过滤器使用说明
2011/08/02 Javascript
JavaScript编程的10个实用小技巧
2014/04/18 Javascript
Javascript实现获取窗口的大小和位置代码分享
2014/12/04 Javascript
JS动态加载当前时间的方法
2015/02/09 Javascript
Javascript设计模式理论与编程实战之简单工厂模式
2015/11/03 Javascript
AngularJS基础 ng-mousemove 指令简单示例
2016/08/02 Javascript
详解jQuery选择器
2016/12/21 Javascript
hovertree插件实现二级树形菜单(简单实用)
2016/12/28 Javascript
网页中右键功能的实现方法之contextMenu的使用
2017/02/20 Javascript
Three.js加载外部模型的教程详解
2017/11/10 Javascript
webpack4 CSS Tree Shaking的使用
2018/09/03 Javascript
vue视图不更新情况详解
2019/05/16 Javascript
Node.js HTTP服务器中的文件、图片上传的方法
2019/09/23 Javascript
JS对象属性的检测与获取操作实例分析
2020/03/17 Javascript
[01:38]女王驾到——至宝魔廷新尊技能&特效展示
2020/06/16 DOTA
python获取本机外网ip的方法
2015/04/15 Python
用不到50行的Python代码构建最小的区块链
2017/11/16 Python
python获取中文字符串长度的方法
2018/11/14 Python
Python hexstring-list-str之间的转换方法
2019/06/12 Python
HTML5拖拽功能实现的拼图游戏
2018/07/31 HTML / CSS
La Senza官网:北美顶尖性感内衣品牌
2018/08/03 全球购物
List, Set, Map是否继承自Collection接口?
2016/05/16 面试题
2014年两会学习心得范例
2014/03/17 职场文书
大学生赌博检讨书
2014/09/22 职场文书
2014社会治安综合治理工作总结
2014/12/04 职场文书
当幸福来敲门观后感
2015/06/01 职场文书
教师节班会主持词
2015/07/06 职场文书
SQL语句中JOIN的用法场景分析
2021/07/25 SQL Server
Python实现制作销售数据可视化看板详解
2021/11/27 Python