Json_encode防止汉字转义成unicode的方法


Posted in PHP onFebruary 25, 2016

大家都知道,json_encode通常会把json中的汉字转义成unicode,但是这并不一定是我们想要的。有时候,我们需要获得汉字形式的json字符串,比如需要获得gbk编码的json字符串(只要把汉字形式的字符串转码就可以得到了)。有什么好办法么?

php官方听到了这个需求,并提供了一种可靠的解决方案:JSON_UNESCAPED_UNICODE。这个参数可以保证json_encode不再将汉字转为unicode。

似乎这样就解决了?当我们高高兴兴的用这个参数的时候,发现并没有什么卵用。仔细一看,这个参数只有5.4之后的php支持。那更早期的php怎么办呢?

社区提供了一种方案:

function my_json_encode($arr){
//convmap since x char codes so it takes all multibyte codes (above ASCII ). So such characters are being "hidden" from normal json_encoding
array_walk_recursive($arr, function (&$item, $key) { if (is_string($item)) $item = mb_encode_numericentity($item, array (x, xffff, , xffff), 'UTF-'); });
return mb_decode_numericentity(json_encode($arr), array (x, xffff, , xffff), 'UTF-');
}

不过这种方法只有5.3才支持,因为5.2并不支持匿名函数。至于解决办法?把匿名函数定义一下即可。

ps:解决json_encode中文UNICODE转码问题

用PHP的json_encode来处理中文的时候, 中文都会被编码, 变成不可读的, 类似”\u***”的格式,如果想汉字不进行转码,这里提供三种方法

1.升级PHP,在PHP5.4, 这个问题终于得以解决, Json新增了一个选项: JSON_UNESCAPED_UNICODE, 故名思议, 就是说, Json不要编码Unicode.

<?php
echo json_encode("中文", JSON_UNESCAPED_UNICODE);
//"中文"

2.把汉字先urlencode然后再使用json_encode,json_encode之后再次使用urldecode来解码,这样编码出来的json数组中的汉字就不会出现unicode编码了。

$array = array(
'test'=>urlencode("我是测试")
);
$array = json_encode($array);
echo urldecode($array);
//{"test":"我是测试"}

3.对unicode码再进行解码,解码函数如下:

function decodeUnicode($str)
{
return preg_replace_callback('/\\\\u([0-9a-f]{4})/i',
create_function(
'$matches',
'return mb_convert_encoding(pack("H*", $matches[1]), "UTF-8", "UCS-2BE");'
),
$str);
}
PHP 相关文章推荐
第六节--访问属性和方法
Nov 16 PHP
深入理解PHP原理之异常机制
Aug 21 PHP
解析数组非数字键名引号的必要性
Aug 09 PHP
PHP实现取得HTTP请求的原文
Aug 18 PHP
PHP面向对象程序设计之接口用法
Aug 20 PHP
php树型类实例
Dec 05 PHP
php实现高效获取图片尺寸的方法
Dec 12 PHP
通过Email发送PHP错误的方法
Jul 20 PHP
Zend Framework实现留言本分页功能(附demo源码下载)
Mar 22 PHP
PHP函数import_request_variables()用法分析
Apr 02 PHP
YII中Ueditor富文本编辑器文件和图片上传的配置图文教程
Mar 15 PHP
PHP判断密码强度的方法详解
May 26 PHP
PHP+JS三级菜单联动菜单实现方法
Feb 24 #PHP
PHP+MySQL实现的简单投票系统实例
Feb 24 #PHP
汇总PHPmailer群发Gmail的常见问题
Feb 24 #PHP
PHP设计模式之简单投诉页面实例
Feb 24 #PHP
在Mac OS上编译安装Nginx+PHP+MariaDB开发环境的教程
Feb 23 #PHP
phalcon框架使用指南
Feb 23 #PHP
PHP计算日期相差天数实例分析
Feb 23 #PHP
You might like
smarty中js的调用方法示例
2014/10/27 PHP
PHP中文字符串截断无乱码解决方法
2016/10/10 PHP
Yii 2.0如何使用页面缓存方法示例
2017/05/23 PHP
PHP7 整型处理机制修改
2021/03/09 PHP
Jquery图形报表插件 jqplot简介及参数详解
2012/10/10 Javascript
JS中的log对象获取以及debug的写法介绍
2014/03/03 Javascript
JQuery性能优化的几点建议
2014/05/14 Javascript
jQuery插件开发的五种形态小结
2015/03/04 Javascript
Jquery promise实现一张一张加载图片
2015/11/13 Javascript
JavaScript事件类型中UI事件详解
2016/01/14 Javascript
BootStrap selectpicker
2016/06/20 Javascript
js实现多图左右切换功能
2016/08/04 Javascript
jQuery插件FusionCharts实现的3D帕累托图效果示例【附demo源码】
2017/03/25 jQuery
从零开始学习Node.js系列教程一:http get和post用法分析
2017/04/13 Javascript
原生JS实现图片懒加载(lazyload)实例
2017/06/13 Javascript
vue-cli的eslint相关用法
2017/09/29 Javascript
Vue写一个简单的倒计时按钮功能
2018/04/20 Javascript
微信小程序基于高德地图API实现天气组件(动态效果)
2020/10/22 Javascript
[03:37]2015国际邀请赛第四日现场精彩集锦
2015/08/08 DOTA
从零学Python之hello world
2014/05/21 Python
python检查字符串是否是正确ISBN的方法
2015/07/11 Python
Python3.6 Schedule模块定时任务(实例讲解)
2017/11/09 Python
Python实现求数列和的方法示例
2018/01/12 Python
如何以Winsows Service方式运行JupyterLab
2020/08/30 Python
Python自定义sorted排序实现方法详解
2020/09/18 Python
Charlotte Tilbury澳大利亚官网:英国美妆品牌
2018/10/05 全球购物
哪些情况下不应该使用索引
2015/07/20 面试题
C#怎么让一个窗口居中显示?
2015/10/20 面试题
行政人员岗位职责
2013/12/08 职场文书
会计辞职信范文
2014/01/15 职场文书
老师的检讨书
2014/02/23 职场文书
委托书的格式
2014/08/01 职场文书
刑事辩护授权委托书
2014/09/13 职场文书
学校党的群众路线教育实践活动整改措施
2014/10/25 职场文书
大学生自荐材料范文
2014/12/30 职场文书
2015年企业员工工作总结范文
2015/05/21 职场文书