php处理json时中文问题的解决方法


Posted in PHP onApril 12, 2011

操作的代码如下:

<?php 
$usr = new User(); 
echo json_encode($usr); 
?>

很简单的代码,无中文情况一切正常,输出如下:
{"PlatformID":"123213","UserID":"1023"}
一旦有中文的时候会出现两种情况。

第一种情况是对象本身的某个值为中文的属性是utf-8编码,则会有如下输出:

{"PlatformID":"123213","UserID":"1023","UserName":"\u00b7\u00f0\u00b5\u00b2\u00c9\u00b1\u00b7\u00f0\u00cc\u00fc"}
其中的UserName是非人类语言,这个是正常的,如果我们用firebug看下就是中文的。(这个纠结了我半天)

第二种情况是非utf-8编码,输出会变成null:

{"PlatformID":"123213","UserID":"1023","UserName":null}
很奇怪,查了手册后知道json_encode是只对utf-8有效,其它编码均会变为null.

下面就开始解决编码转化的问题。
在php.net上看到别人的函数如下:

private function to_utf8($in) 
{ 
if (is_array($in)) { 
foreach ($in as $key => $value) 
{ 
$out[$this->to_utf8($key)] = $this->to_utf8($value); 
} 
} 
elseif(is_string($in)) 
{ 
if(mb_detect_encoding($in) != "UTF-8") 
return utf8_encode($in); 
else 
return $in; 
} 
else 
{ 
return $in; 
} 
return $out; 
}

于是拿下来转换编码发现已经不为null.欣喜之下用firebug打开,发现并不是我原来的中文字符....开始纠结......
难道是要让他转换成原来的编码?回去寻找原始编码......
测试开始:

1.把$usr->UserName直接输出,页面头设置charset=utf-8.乱码
2.echo json_encode($usr)输出UserName=null
3.页面头设置为charset=gbk,输出正确->可以确定原编码为gbk
最后通过IE,Chrome,Firefox测试得出结论:

1.保证页面字符集与数据库一致,输出一定正常 。
2.做json_encode时保证数据编码是utf-8,json_decode正常。
3.如果要对非utf-8字符做json_encode,先转换成utf-8。
4.对非utf-8字符做json_decode的时候,千万不能忘记转换成原先的编码,否则会输出乱码!!
困扰了一天的问题终于搞定了。

PHP 相关文章推荐
自定义PHP分页函数
Oct 09 PHP
关于BIG5-HKSCS的解决方法
Mar 20 PHP
PHP 文件类型判断代码
Mar 13 PHP
PHP为表单获取的URL 地址预设 http 字符串函数代码
May 26 PHP
PHPwind整合最土系统用户同步登录实现方法
Dec 08 PHP
php cli模式学习(PHP命令行模式)
Jun 03 PHP
php无限遍历文件夹示例分享
Mar 04 PHP
PHP邮件发送类PHPMailer用法实例详解
Sep 22 PHP
Yii2创建多界面主题(Theme)的方法
Oct 08 PHP
PHP中str_split()函数的用法讲解
Apr 11 PHP
Laravel开启跨域请求的方法
Oct 13 PHP
Laravel 5+ .env环境配置文件详解
Apr 06 PHP
php 面向对象的一个例子
Apr 12 #PHP
深入理解PHP原理之Session Gc的一个小概率Notice
Apr 12 #PHP
php表单提交问题的解决方法
Apr 12 #PHP
使用NetBeans + Xdebug调试PHP程序的方法
Apr 12 #PHP
php产生随机数的两种方法实例代码 输出随机IP
Apr 08 #PHP
PHP随机数生成代码与使用实例分析
Apr 08 #PHP
PHP的cURL库功能简介 抓取网页、POST数据及其他
Apr 07 #PHP
You might like
Yii中使用PHPExcel导出Excel的方法
2014/12/26 PHP
php文档工具PHP Documentor安装与使用方法
2016/01/25 PHP
YII框架关联查询操作示例
2019/04/29 PHP
Yii2框架中一些折磨人的坑
2019/12/15 PHP
一个挺有意思的Javascript小问题说明
2011/09/26 Javascript
editable.js 基于jquery的表格的编辑插件
2011/10/24 Javascript
如何让页面在打开时自动刷新一次让图片全部显示
2012/12/17 Javascript
基于mouseout和mouseover等类似事件的冒泡问题解决方法
2013/11/18 Javascript
在页面上用action传递参数到后台出现乱码的解决方法
2013/12/31 Javascript
js简单抽奖代码
2015/01/16 Javascript
给before和after伪元素设置js效果的方法
2015/12/04 Javascript
原生js实现图片轮播特效
2015/12/18 Javascript
莱鸟介绍window.print()方法
2016/01/06 Javascript
微信小程序开发探究
2016/12/27 Javascript
完美解决input[type=number]无法显示非数字字符的问题
2017/02/28 Javascript
js轮播图的插件化封装详解
2017/07/17 Javascript
基于Vue2-Calendar改进的日历组件(含中文使用说明)
2019/04/14 Javascript
Vue this.$router.push(参数)实现页面跳转操作
2020/09/09 Javascript
[01:10]为家乡而战!完美世界城市挑战赛全国总决赛花絮
2019/07/25 DOTA
利用Python代码实现数据可视化的5种方法详解
2018/03/25 Python
Python实现的简单读写csv文件操作示例
2018/07/12 Python
使用PM2+nginx部署python项目的方法示例
2018/11/07 Python
python提取xml里面的链接源码详解
2019/10/15 Python
pytorch 实现张量tensor,图片,CPU,GPU,数组等的转换
2020/01/13 Python
python实现可下载音乐的音乐播放器
2020/02/25 Python
Python 格式化打印json数据方法(展开状态)
2020/02/27 Python
Python使用Paramiko控制liunx第三方库
2020/05/20 Python
浅析python字符串前加r、f、u、l 的区别
2021/01/24 Python
No module named ‘win32gui‘ 的解决方法(踩坑之旅)
2021/02/18 Python
css3实现的下拉菜单效果示例
2014/01/22 HTML / CSS
CSS3弹性盒模型flex box快速入门心得(必看篇)
2016/05/24 HTML / CSS
微软俄罗斯官方网站:Microsoft俄罗斯
2016/09/18 全球购物
施华洛世奇匈牙利官网:SWAROVSKI匈牙利
2019/07/06 全球购物
见习期自我鉴定
2013/11/07 职场文书
大学毕业典礼演讲稿
2014/09/09 职场文书
给男朋友的道歉短信
2015/05/12 职场文书