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 相关文章推荐
linux下使用ThinkPHP需要注意大小写导致的问题
Aug 02 PHP
zf框架的Filter过滤器使用示例
Mar 13 PHP
Mac OS下配置PHP+MySql环境
Feb 25 PHP
PHP借助phpmailer发送邮件
May 11 PHP
PHP实现简单数字分页效果
Jul 26 PHP
对比PHP对MySQL的缓冲查询和无缓冲查询
Jul 01 PHP
php数组指针操作详解
Feb 14 PHP
php实现的中秋博饼游戏之绘制骰子图案功能示例
Nov 06 PHP
php curl获取到json对象并转成数组array的方法
May 31 PHP
PHP INT类型在内存中占字节详解
Jul 20 PHP
laravel5.5添加echarts实现画图功能的方法
Oct 09 PHP
PHP过滤器 filter_has_var() 函数用法实例分析
Apr 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
刚才在简化php的库,结果发现很多东西
2006/12/31 PHP
phpmyadmin 访问被拒绝的真实原因
2009/06/15 PHP
php数组函数序列 之shuffle()和array_rand() 随机函数使用介绍
2011/10/29 PHP
php关联数组快速排序的方法
2015/04/17 PHP
PHP无限极分类函数的实现方法详解
2017/04/15 PHP
Javascript 遮罩层和加载效果代码
2013/08/01 Javascript
简单的ajax连接库分享(不用jquery的ajax)
2014/01/19 Javascript
基于bootstrap-datetimepicker.js不支持IE8的快速解决方法
2016/11/07 Javascript
微信小程序 wx.request(接口调用方式)详解及实例
2016/11/23 Javascript
bootstrap使用validate实现简单校验功能
2016/12/02 Javascript
详解springmvc 接收json对象的两种方式
2016/12/06 Javascript
原生JS实现左右箭头选择日期实例代码
2017/03/14 Javascript
JavaScript Canvas绘制圆形时钟效果
2020/08/20 Javascript
详解AngularJS ui-sref的简单使用
2017/04/24 Javascript
简单实现jQuery轮播效果
2017/08/18 jQuery
JS实现预加载视频音频/视频获取截图(返回canvas截图)
2017/10/09 Javascript
JavaScript跳出循环的三种方法(break, return, continue)
2019/07/30 Javascript
解决vue项目获取dom元素宽高总是不准确问题
2020/07/29 Javascript
Python的collections模块中namedtuple结构使用示例
2016/07/07 Python
Python 的类、继承和多态详解
2017/07/16 Python
Pandas数据离散化原理及实例解析
2019/11/16 Python
python 操作hive pyhs2方式
2019/12/21 Python
pytorch 利用lstm做mnist手写数字识别分类的实例
2020/01/10 Python
浅析python表达式4+0.5值的数据类型
2020/02/26 Python
Python 从attribute到property详解
2020/03/05 Python
Python之字符串的遍历的4种方式
2020/12/08 Python
木马的传播途径主要有哪些
2016/04/08 面试题
若干个Java基础面试题
2015/05/19 面试题
农田水利实习自我鉴定
2013/09/19 职场文书
社会实践评语
2014/04/28 职场文书
贫困证明书格式及范文
2014/10/15 职场文书
党员年终个人总结
2015/02/14 职场文书
事业单位聘任报告
2015/03/02 职场文书
导游词之潮音寺
2019/09/26 职场文书
星际争霸 Light vs Action 一场把教主看到鬼畜的比赛
2022/04/01 星际争霸
mysql性能优化以及配置连接参数设置
2022/05/06 MySQL