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 相关文章推荐
搜索引擎技术核心揭密
Oct 09 PHP
PHP 的ArrayAccess接口 像数组一样来访问你的PHP对象
Oct 12 PHP
用PHP实现 上一篇、下一篇的代码
Sep 29 PHP
关于PHP堆栈与列队的学习
Jun 21 PHP
分享微信扫码支付开发遇到问题及解决方案-附Ecshop微信支付插件
Aug 23 PHP
Yii实现单用户博客系统文章详情页插入评论表单的方法
Dec 28 PHP
CodeIgniter表单验证方法实例详解
Mar 03 PHP
PHP数组函数array_multisort()用法实例分析
Apr 02 PHP
PHP中Restful api 错误提示返回值实现思路
Apr 12 PHP
PHP写的简单数字验证码实例
May 23 PHP
Laravel框架实现redis集群的方法分析
Sep 14 PHP
设定php简写功能的方法
Nov 28 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之可变函数的实例详解
2017/09/13 PHP
PHP 多任务秒级定时器的实现方法
2018/05/13 PHP
javascript跨域刷新实现代码
2011/01/01 Javascript
点弹代码 点击页面任何位置都可以弹出页面效果代码
2012/09/17 Javascript
jQuery学习笔记 操作jQuery对象 文档处理
2012/09/19 Javascript
如何判断鼠标是否在DIV的区域内
2013/11/13 Javascript
JavaScript加入收藏夹功能(兼容IE、firefox、chrome)
2014/05/05 Javascript
javascript图片切换综合实例(循环切换、顺序切换)
2016/01/13 Javascript
AngularJS 执行流程详细介绍
2016/08/18 Javascript
利用Javascript仿Excel的数据透视分析功能
2016/09/07 Javascript
AngularJS实现select的ng-options功能示例
2017/07/12 Javascript
JS实现字符串去重及数组去重的方法示例
2018/04/21 Javascript
详解开发react应用最好用的脚手架 create-react-app
2018/04/24 Javascript
浅谈Angularjs中不同类型的双向数据绑定
2018/07/16 Javascript
vue中使用heatmapjs的示例代码(结合百度地图)
2018/09/05 Javascript
vue返回上一页面时回到原先滚动的位置的方法
2018/12/20 Javascript
深入探索VueJS Scoped CSS 实现原理
2019/09/23 Javascript
微信js-sdk 录音功能的示例代码
2019/11/01 Javascript
详解vue-router 动态路由下子页面多页共活的解决方案
2019/12/22 Javascript
利用js实现简易红绿灯
2020/10/15 Javascript
分析Python的Django框架的运行方式及处理流程
2015/04/08 Python
Python数据分析之获取双色球历史信息的方法示例
2018/02/03 Python
使用Python检测文章抄袭及去重算法原理解析
2019/06/14 Python
如何不用安装python就能在.NET里调用Python库
2019/07/12 Python
Django微信小程序后台开发教程的实现
2020/06/03 Python
Django --Xadmin 判断登录者身份实例
2020/07/03 Python
Python urlopen()参数代码示例解析
2020/12/10 Python
使用CSS Grid布局实现网格的流动
2014/12/30 HTML / CSS
可自定义箭头样式的CSS3气泡提示框
2016/03/16 HTML / CSS
材料加工工程求职信
2014/02/19 职场文书
公安机关党的群众路线教育实践活动剖析材料
2014/10/10 职场文书
辩论赛主持人开场白
2015/05/29 职场文书
2016年入党心得体会范文
2016/01/23 职场文书
职场新人知识:如何制定一份合理的工作计划?
2019/09/11 职场文书
如何用python反转图片,视频
2021/04/24 Python
Python代码,能玩30多款童年游戏!这些有几个是你玩过的
2021/04/27 Python