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初学者头疼十四条问题大总结
Nov 12 PHP
PHP 配置文件中open_basedir选项作用
Jul 19 PHP
解决File size limit exceeded 错误的方法
Jun 14 PHP
PHP PDOStatement:bindParam插入数据错误问题分析
Nov 13 PHP
去掉destoon资讯内容页keywords关键字自带的文章标题的方法
Aug 21 PHP
thinkphp表单上传文件并将文件路径保存到数据库中
Jul 28 PHP
PHP仿微信发红包领红包效果
Oct 30 PHP
谈谈从phpinfo中能获取哪些值得注意的信息
Mar 28 PHP
PHP yield关键字功能与用法分析
Jan 03 PHP
php封装的pdo数据库操作工具类与用法示例
May 08 PHP
PHP中-&gt;和=&gt;的含义及使用示例解析
Aug 06 PHP
laravel中Redis队列监听中断的分析
Sep 14 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的单引号和双引号 字符串效率
2009/05/27 PHP
PHP获取MAC地址的函数代码
2011/09/11 PHP
php模板函数 正则实现代码
2012/10/15 PHP
php中通过数组进行高效随机抽取指定条记录的算法
2013/09/09 PHP
php转换颜色为其反色的方法
2015/04/27 PHP
PHP中PDO连接数据库中各种DNS设置方法小结
2016/05/13 PHP
php面向对象之反射功能与用法分析
2017/03/29 PHP
PHP7引入的&quot;??&quot;和&quot;?:&quot;的区别讲解
2019/04/08 PHP
PHP检测一个数组有没有定义的方法步骤
2019/07/20 PHP
php实现统计IP数及在线人数的示例代码
2020/07/22 PHP
使用Math.floor与Math.random取随机整数的方法详解
2013/05/07 Javascript
js 日期比较相关天数代码
2014/04/02 Javascript
JavaScript中数据结构与算法(二):队列
2015/06/19 Javascript
把Node.js程序加入服务实现随机启动
2015/06/25 Javascript
javascript 判断两个日期之差的示例代码
2015/09/05 Javascript
javascript弹性运动效果简单实现方法
2016/01/08 Javascript
JS控制伪元素的方法汇总
2016/04/06 Javascript
JS控制层作圆周运动的方法
2016/06/20 Javascript
Linux CentOS系统下安装node.js与express的方法
2017/04/01 Javascript
js实现分页功能
2017/05/24 Javascript
关于express与koa的使用对比详解
2018/01/25 Javascript
基于node搭建服务器,写接口,调接口,跨域的实例
2018/05/13 Javascript
通过jquery.cookie.js实现记住用户名、密码登录功能
2018/06/20 jQuery
Vue通过配置WebSocket并实现群聊功能
2019/12/31 Javascript
JS实现随机点名器
2020/04/12 Javascript
Vue微信公众号网页分享的示例代码
2020/05/28 Javascript
Python中的Numeric包和Numarray包使用教程
2015/04/13 Python
Python简单获取网卡名称及其IP地址的方法【基于psutil模块】
2018/05/24 Python
python basemap 画出经纬度并标定的实例
2019/07/09 Python
python异步编程 使用yield from过程解析
2019/09/25 Python
Python 实现训练集、测试集随机划分
2020/01/08 Python
详解python日志输出使用配置文件格式
2021/02/10 Python
CSS3对图片照片进行边缘模糊处理的实现
2018/08/08 HTML / CSS
阿联酋电子产品购物网站:Menakart
2017/09/15 全球购物
2014年护理工作总结范文
2014/11/14 职场文书
结婚幸福感言
2015/08/01 职场文书