PHP5.4中json_encode中文转码的变化小结


Posted in PHP onJanuary 30, 2013

在php5.4以前做json_encode的时候中文会被unicode编码,中文都会被编码,变成不可读的,类似“\u***”的格式,还会在一定程度上增加传输的数据量。
例如:

<?php 
$str = '中文'; 
echo json_encode($str); 
//"\u4e2d\u6587" 
php5.4开始 
echo json_encode($str, JSON_UNESCAPED_UNICODE); 
//"中文"

php5.4让json更懂中文!
5.4之前不进行unicode转码,有3种方法处理
但其实前两种方式是会导致问题,在一些特殊的情况下。如下例:
function myjson($code) { 
$code = json_encode(urlencodeAry($code)); 
return urldecode($code); 
} 
function urlencodeAry($data) { 
if(is_array($data)) { 
foreach($data as $key=>$val) { 
$data[$key] = urlencodeAry($val); 
} 
return $data; 
} else { 
return urlencode($data); 
} 
} 
$test = array ( 
0 => '"大连周水子机场"→人民路', 
1 => '运营时间:5:10~21:00 票价:16元 发车间隔20分钟一班,客满随时发车', 
); 
/* 
通过常规则的json_encode|json_decode来编解码 
["\"\u5927\u8fde\u5468\u6c34\u5b50\u673a\u573a\"\u2192\u4eba\u6c11\u8def","\u8fd0\u8425\u65f6 
\u95f4\uff1a5\uff1a10\uff5e21\uff1a00 \u7968\u4ef7\uff1a16\u5143 \u53d1\u8f66\u95f4\u969420 
\u5206\u949f\u4e00\u73ed\uff0c\u5ba2\u6ee1\u968f\u65f6\u53d1\u8f66"] 
array ( 
0 => '"大连周水子机场"→人民路', 
1 => '运营时间:5:10~21:00 票价:16元 发车间隔20分钟一班,客满随时发车', 
) 
*/ 
$test1 = json_encode($test); 
$test2 = json_decode($test1, TRUE); 
echo $test1; 
echo PHP_EOL; 
var_export($test2); 
echo PHP_EOL; 
/* 
通过myjson|json_decode来编解码,但是会出报错json_last_error返回(JSON_ERROR_SYNTAX === 4), 
因为""大连周水子机场"→人民路" 
[""大连周水子机场"→人民路","运营时间:5:10~21:00 票价:16元 发车间隔20分钟一班,客满随时发车"] 
NULL 
*/ 
$test1_1 = myjson($test); 
$test2_1 = json_decode($test1_1, TRUE); 
echo $test1_1; 
echo PHP_EOL; 
var_export($test2_1); 
echo PHP_EOL; 
/* 
通过json_enco+pack|json_decode来编解码,保证不会对中文编码,但是会缺少运营时间数据和票价 
["\"大连周水子机场\"→人民路","运营时间::~: 票价:元 发车间隔分钟一班,客满随时发车"] 
array ( 
0 => '"大连周水子机场"→人民路', 
1 => '运营时间::~: 票价:元 发车间隔分钟一班,客满随时发车', 
) 
*/ 
function replaceUni($str) { 
return preg_replace("#\\\u([0-9a-f]+)#ie", "iconv('UCS-2', 'UTF-8', pack('H4', '\\1'))", $str); 
} 
$test1_2 = replaceUni(json_encode($test)); 
$test2_2 = json_decode($test1_2, TRUE); 
echo $test1_2; 
echo PHP_EOL; 
var_export($test2_2); 
echo PHP_EOL;

最后总结一句,推荐升级到PHP5.4,让PHP更懂中文!
PHP 相关文章推荐
新版PHP将向Java靠拢
Oct 09 PHP
一些常用的php函数
Dec 06 PHP
用PHP查询搜索引擎排名位置的代码
Jan 05 PHP
php在文件指定行中写入代码的方法
May 23 PHP
PHP 简易输出CSV表格文件的方法详解
Jun 20 PHP
php session_start()出错原因分析及解决方法
Oct 28 PHP
ThinkPHP让分页保持搜索状态的方法
Jul 02 PHP
详谈PHP文件目录基础操作
Nov 11 PHP
php模拟服务器实现autoindex效果的方法
Mar 10 PHP
PHP实现的简单留言板功能示例【基于thinkPHP框架】
Dec 07 PHP
stripos函数知识点实例分享
Feb 11 PHP
如何用PHP websocket实现网页实时聊天
May 26 PHP
PHP读取数据库并按照中文名称进行排序实现代码
Jan 29 #PHP
PHP查询数据库中满足条件的记录条数(两种实现方法)
Jan 29 #PHP
PHP获取数组中某元素的位置及array_keys函数应用
Jan 29 #PHP
有关phpmailer的详细介绍及使用方法
Jan 28 #PHP
PHP输出时间差函数代码
Jan 28 #PHP
PHP调用Linux的命令行执行文件压缩命令
Jan 27 #PHP
php压缩HTML函数轻松实现压缩html/js/Css及注意事项
Jan 27 #PHP
You might like
PHP的数组中提高元素查找与元素去重的效率的技巧解析
2016/03/03 PHP
Discuz不使用插件实现简单的打赏功能
2019/03/21 PHP
使用Jquery打造最佳用户体验的登录页面的实现代码
2011/07/08 Javascript
jQuery对象数据缓存Cache原理及jQuery.data方法区别介绍
2013/04/07 Javascript
js 表单提交后按钮变灰的实例代码
2013/08/16 Javascript
javascript避免数字计算精度误差的方法详解
2014/03/05 Javascript
javascript实现playfair和hill密码算法
2014/12/07 Javascript
浅谈window对象的scrollBy()方法
2015/07/15 Javascript
深入解析JavaScript中的数字对象与字符串对象
2015/10/21 Javascript
jQuery EasyUI 入门必看
2016/06/03 Javascript
基于Vue.js实现简单搜索框
2020/03/26 Javascript
ajax分页效果(bootstrap模态框)
2017/01/23 Javascript
深入理解 JavaScript 中的 JSON
2017/04/06 Javascript
Angular 2父子组件数据传递之@Input和@Output详解 (上)
2017/07/05 Javascript
Vue 2.0的数据依赖实现原理代码简析
2017/07/10 Javascript
JavaScript实现的斑马线表格效果【隔行变色】
2017/09/18 Javascript
Vue路由切换时的左滑和右滑效果示例
2018/05/29 Javascript
Babel 入门教程学习笔记
2018/06/13 Javascript
用Node编写RESTful API接口的示例代码
2018/07/04 Javascript
JavaScript中工厂函数与构造函数示例详解
2019/05/06 Javascript
详解iview的checkbox多选框全选时校验问题
2019/06/10 Javascript
Node登录权限验证token验证实现的方法示例
2020/05/25 Javascript
[02:54]DOTA2英雄基础教程 暗影牧师戴泽
2013/12/05 DOTA
使用Python中的线程进行网络编程的入门教程
2015/04/15 Python
简单介绍Python2.x版本中的cmp()方法的使用
2015/05/20 Python
使用Python读写文本文件及编写简单的文本编辑器
2016/03/11 Python
简单了解Django应用app及分布式路由
2019/07/24 Python
如何基于Python实现电子邮件的发送
2019/12/16 Python
Python用requests库爬取返回为空的解决办法
2021/02/21 Python
小学生期末自我鉴定
2014/01/19 职场文书
工程招投标邀请书
2014/01/26 职场文书
员工2014年度工作总结
2014/12/09 职场文书
浏览器常用基本操作之python3+selenium4自动化测试(基础篇3)
2021/05/21 Python
Nginx的基本概念和原理
2022/03/21 Servers
20180830晚上第一届KSL半决赛 雨神vs解冻(二龙 三炮解说)
2022/04/01 星际争霸
SQL中去除重复数据的几种方法汇总(窗口函数对数据去重)
2023/05/08 MySQL