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实现的简单压缩英文字符串的代码
Apr 24 PHP
php 数组使用详解 推荐
Jun 02 PHP
php实现单链表的实例代码
Mar 22 PHP
php快递单号查询接口使用示例
May 05 PHP
PHP实现的简单三角形、矩形周长面积计算器分享
Nov 18 PHP
ThinkPHP自动完成中使用函数与回调方法实例
Nov 29 PHP
php设计模式之单例模式实例分析
Feb 25 PHP
PHP+jquery+CSS制作头像登录窗(仿QQ登陆)
Oct 20 PHP
解决form中action属性后面?传递参数 获取不到的问题
Jul 21 PHP
PHP实现负载均衡下的session共用功能
Apr 17 PHP
PHP扩展Swoole实现实时异步任务队列示例
Apr 13 PHP
java解析json方法总结
May 16 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
shell脚本作为保证PHP脚本不挂掉的守护进程实例分享
2013/07/15 PHP
Symfony的安装和配置方法
2016/03/17 PHP
基于jQuery的JavaScript模版引擎JsRender使用指南
2014/12/29 Javascript
JS实现的左侧竖向滑动菜单效果代码
2015/10/19 Javascript
KnockoutJS 3.X API 第四章之数据控制流foreach绑定
2016/10/10 Javascript
深入浅析Vue组件开发
2016/11/25 Javascript
详解angular中的作用域及继承
2017/05/31 Javascript
MUI 实现侧滑菜单及其主体部分上下滑动的方法
2018/01/25 Javascript
轻量级JS Cookie插件js-cookie的使用方法
2018/03/22 Javascript
微信小程序仿美团城市选择
2018/06/06 Javascript
jQuery序列化form表单数据为JSON对象的实现方法
2018/09/20 jQuery
webpack3里使用uglifyjs压缩js时打包报错的解决
2018/12/13 Javascript
JS+php后台实现文件上传功能详解
2019/03/02 Javascript
vue实现简易计算器功能
2021/01/20 Vue.js
python批量导出导入MySQL用户的方法
2013/11/15 Python
Python3实现将文件归档到zip文件及从zip文件中读取数据的方法
2015/05/22 Python
在Python的Django框架中创建和使用模版
2015/07/15 Python
python实现web方式logview的方法
2015/08/10 Python
Python用模块pytz来转换时区
2016/08/19 Python
pytorch 彩色图像转灰度图像实例
2020/01/13 Python
基于python3的socket聊天编程
2020/02/17 Python
Python爬虫获取页面所有URL链接过程详解
2020/06/04 Python
Linux安装Python3如何和系统自带的Python2并存
2020/07/23 Python
CSS3动画之利用requestAnimationFrame触发重新播放功能
2019/09/11 HTML / CSS
分享CSS3制作卡片式图片的方法
2016/07/08 HTML / CSS
利用三角函数在canvas上画虚线的方法
2018/01/11 HTML / CSS
canvas里面如何基于随机点绘制一个多边形的方法
2018/06/13 HTML / CSS
五星级酒店餐饮部总监的标准岗位职责
2014/02/17 职场文书
知识竞赛活动方案
2014/02/18 职场文书
学校节能宣传周活动总结
2014/07/09 职场文书
幼儿园感恩节活动总结
2015/03/24 职场文书
业务内勤岗位职责
2015/04/13 职场文书
全陪导游词开场白
2015/05/29 职场文书
团队拓展训练感想
2015/08/07 职场文书
2020年基层司法所建设情况调研报告
2019/11/30 职场文书
Vue接口封装的完整步骤记录
2021/05/14 Vue.js