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 相关文章推荐
用PHP获取Google AJAX Search API 数据的代码
Mar 12 PHP
php读取javascript设置的cookies的代码
Apr 12 PHP
phpadmin如何导入导出大数据文件及php.ini参数修改
Feb 18 PHP
php抓取页面的几种方法详解
Jun 17 PHP
ThinkPHP行为扩展Behavior应用实例详解
Jul 22 PHP
php中动态修改ini配置
Oct 14 PHP
Yii分页用法实例详解
Dec 04 PHP
thinkphp3.x连接mysql数据库的方法(具体操作步骤)
May 19 PHP
Thinkphp实现站点静态化的方法详解
Mar 21 PHP
Yii2数据库操作常用方法小结
May 04 PHP
PHP通过bypass disable functions执行系统命令的方法汇总
May 02 PHP
Yii2框架实现登陆添加验证码功能示例
Jul 12 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
php include类文件超时问题处理
2015/02/06 PHP
浅谈PHP中静态方法和非静态方法的相互调用
2016/10/04 PHP
php解析mht文件转换成html的实例
2017/03/13 PHP
javascript flash下fromCharCode和charCodeAt方法使用说明
2008/01/12 Javascript
javascript中类的定义及其方式(《javascript高级程序设计》学习笔记)
2011/07/04 Javascript
获取数组中最大最小值方法js代码(自写)
2013/08/12 Javascript
解析Javascript中大括号“{}”的多义性
2013/12/02 Javascript
js实现网页抽奖实例
2015/08/05 Javascript
Bootstrap每天必学之表格
2015/11/23 Javascript
jquery悬浮提示框完整实例
2016/01/13 Javascript
JS实现图片平面旋转的方法
2016/03/01 Javascript
详解XMLHttpRequest(一)同步请求和异步请求
2016/09/14 Javascript
Javascript 引擎工作机制详解
2016/11/30 Javascript
JS敏感词过滤代码
2016/12/23 Javascript
浅谈js中的变量名和函数名重名
2017/02/13 Javascript
微信小程序如何获知用户运行小程序的场景教程
2017/05/17 Javascript
vue-cli常用设置总结
2018/02/24 Javascript
vue-cli3.0 特性解读
2018/04/22 Javascript
vue 父组件通过$refs获取子组件的值和方法详解
2019/11/07 Javascript
Vue 一键清空表单的实现方法
2020/02/07 Javascript
python中pycurl库的用法实例
2014/09/30 Python
python画一个玫瑰和一个爱心
2020/08/18 Python
Python产生Gnuplot绘图数据的方法
2018/11/09 Python
python模拟登陆,用session维持回话的实例
2018/12/27 Python
Python基于smtplib模块发送邮件代码实例
2020/05/29 Python
用HTML5 实现橡皮擦的涂抹效果的教程
2015/05/11 HTML / CSS
HTML5 拖放功能实现代码
2016/07/14 HTML / CSS
C#面试题
2016/05/06 面试题
信息管理专业自荐书
2014/06/05 职场文书
2014年绿化工作总结
2014/12/09 职场文书
寒假社会实践个人总结
2015/03/06 职场文书
2015年体育部工作总结
2015/04/02 职场文书
2015年小学实验室工作总结
2015/07/28 职场文书
《社戏》教学反思
2016/02/22 职场文书
分析Python感知线程状态的解决方案之Event与信号量
2021/06/16 Python
解决mysql模糊查询索引失效问题的几种方法
2021/06/18 MySQL