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 split汉字
Jun 05 PHP
php array_map()数组函数使用说明
Jul 12 PHP
PHP中使用cURL实现Get和Post请求的方法
Mar 13 PHP
基于empty函数的判断详解
Jun 17 PHP
php5.3 goto函数介绍和示例
Mar 21 PHP
php中将一个对象保存到Session中的方法
Mar 13 PHP
php输出xml属性的方法
Mar 19 PHP
php给图片添加文字水印方法汇总
Aug 27 PHP
ThinkPHP中where()使用方法详解
Apr 19 PHP
php 解决substr()截取中文字符乱码问题
Jul 18 PHP
laravel 执行迁移回滚示例
Oct 23 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
json的键名为数字时的调用方式(示例代码)
2013/11/15 PHP
ThinkPHP2.0读取MSSQL提示Incorrect syntax near the keyword 'AS'的解决方法
2014/06/25 PHP
php正则去除网页中所有的html,js,css,注释的实现方法
2016/11/03 PHP
thinkphp整合微信支付代码分享
2016/11/24 PHP
PHP基于方差和标准差计算学生成绩的稳定性示例
2017/07/04 PHP
gearman管理工具GearmanManager的安装与php使用方法示例
2020/02/27 PHP
一句话JavaScript表单验证代码
2009/08/02 Javascript
javascript 模式设计之工厂模式学习心得
2010/04/27 Javascript
javascript中substr,substring,slice.splice的区别说明
2010/11/25 Javascript
jQuery EasyUI API 中文文档 - NumberSpinner数值微调器使用介绍
2011/10/21 Javascript
js函数内变量的作用域分析
2015/01/12 Javascript
firefox浏览器用jquery.uploadify插件上传时报HTTP 302错误
2015/03/01 Javascript
setTimeout内不支持jquery的选择器的解决方案
2015/04/28 Javascript
Javascript闭包实例详解
2015/11/29 Javascript
js实现滚动条滚动到页面底部继续加载
2015/12/19 Javascript
功能强大的Bootstrap效果展示(二)
2016/08/03 Javascript
jQuery实现字体颜色渐变效果的方法
2017/03/29 jQuery
js微信应用场景之微信音乐相册案例分享
2017/08/11 Javascript
BootStrap下的弹出框加载select2框架失败的解决方法
2017/08/31 Javascript
使用ionic(选项卡栏tab) icon(图标) ionic上拉菜单(ActionSheet) 实现通讯录界面切换实例代码
2017/10/20 Javascript
详解Nodejs mongoose
2018/06/10 NodeJs
使用angular-cli webpack创建多个包的方法
2018/10/16 Javascript
python使用xpath中遇到:到底是什么?
2018/01/04 Python
Python读写及备份oracle数据库操作示例
2018/05/17 Python
python实现简单五子棋游戏
2019/06/18 Python
python函数与方法的区别总结
2019/06/23 Python
python pycharm最新版本激活码(永久有效)附python安装教程
2020/09/18 Python
Tensorflow 卷积的梯度反向传播过程
2020/02/10 Python
实现Python3数组旋转的3种算法实例
2020/09/16 Python
成龙霸王洗发水广告词
2014/03/14 职场文书
2015年党支部公开承诺书
2015/01/22 职场文书
专家推荐信怎么写
2015/03/25 职场文书
2015公司年度工作总结
2015/05/14 职场文书
英镑符号 £
2022/02/17 杂记
Python调用腾讯API实现人脸身份证比对功能
2022/04/04 Python
python playwrigh框架入门安装使用
2022/07/23 Python