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完全过滤HTML,JS,CSS等标签
Jan 16 PHP
php ftp文件上传函数(基础版)
Jun 03 PHP
教你如何使用php session
Oct 28 PHP
php中autoload的用法总结
Nov 08 PHP
php去除字符串换行符示例分享
Feb 13 PHP
codeigniter集成ucenter1.6双向通信的解决办法
Jun 12 PHP
浅谈php+phpStorm+xdebug配置方法
Sep 17 PHP
Symfony2实现在doctrine中内置数据的方法
Feb 05 PHP
CodeIgniter连贯操作的底层原理分析
May 17 PHP
php 微信公众平台开发模式实现多客服的实例代码
Nov 07 PHP
PHP读取CSV大文件导入数据库的实例
Jul 24 PHP
PHP基于SPL实现的迭代器模式示例
Apr 22 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 正则表达式之正则处理函数小结(preg_match,preg_match_all,preg_replace,preg_split)
2012/10/05 PHP
php对称加密算法示例
2014/05/07 PHP
微信公众平台之快递查询功能用法实例
2015/04/14 PHP
基于jQuery的公告无限循环滚动实现代码
2012/05/11 Javascript
JQuery判断radio是否选中并获取选中值的示例代码
2014/10/17 Javascript
JavaScript获取文本框内选中文本的方法
2015/02/20 Javascript
简单分析javascript中的函数
2016/09/10 Javascript
ztree实现权限横向显示功能
2017/05/20 Javascript
JS简单实现自定义右键菜单实例
2017/05/31 Javascript
深入理解Node.js中通用基础设计模式
2017/09/19 Javascript
细说webpack源码之compile流程-rules参数处理技巧(1)
2017/12/26 Javascript
Vue2 模板template的四种写法总结
2018/02/23 Javascript
如何理解Vue的v-model指令的使用方法
2018/07/19 Javascript
[jQuery] 事件和动画详解
2019/03/05 jQuery
vue组件之间的数据传递方法详解
2019/04/19 Javascript
jquery图片预览插件实现方法详解
2019/07/18 jQuery
javascript实现抢购倒计时程序
2019/08/26 Javascript
[00:03]DOTA2新版本PA至宝展示
2014/11/19 DOTA
详解使用pymysql在python中对mysql的增删改查操作(综合)
2017/01/18 Python
python正则表达式匹配[]中间为任意字符的实例
2018/12/25 Python
Python之lambda匿名函数及map和filter的用法
2019/03/05 Python
Python post请求实现代码实例
2020/02/28 Python
如何配置关联Python 解释器 Anaconda的教程(图解)
2020/04/30 Python
基础的CSS3弹性盒Flexbox布局使用实例
2016/04/08 HTML / CSS
Html5插件教程之添加浏览器放大镜效果的商品橱窗
2016/01/07 HTML / CSS
土耳其时尚购物网站:Morhipo
2017/09/04 全球购物
英国最大的体育&时尚零售公司:JD Sports
2017/12/13 全球购物
三星英国官网:Samsung英国
2018/09/25 全球购物
网络、C以及其他硬件方面的面试题
2016/08/23 面试题
中专生自我鉴定
2013/12/17 职场文书
初中地理教学反思
2014/01/11 职场文书
媒体宣传策划方案
2014/05/25 职场文书
信息工作经验交流材料
2014/05/28 职场文书
面试通知单大全
2015/04/20 职场文书
优秀新员工事迹材料
2019/05/13 职场文书
python实现Nao机器人的单目测距
2021/09/04 Python