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聊天室技术
Oct 09 PHP
php面向对象全攻略 (十) final static const关键字的使用
Sep 30 PHP
php判断手机访问还是电脑访问示例分享
Jan 20 PHP
php获取从百度、谷歌等搜索引擎进入网站关键词的方法
Jul 08 PHP
PHP代码实现爬虫记录――超管用
Jul 31 PHP
php实现图片以base64显示的方法
Oct 13 PHP
php+mysql实现简单登录注册修改密码网页
Nov 30 PHP
PHP中的使用curl发送请求(GET请求和POST请求)
Feb 08 PHP
PHP中Notice错误常见解决方法
Apr 28 PHP
PHP PDOStatement::execute讲解
Jan 31 PHP
Ajax+PHP实现的删除数据功能示例
Feb 12 PHP
php实现文件上传基本验证
Mar 04 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如何编写易读的代码
2007/07/10 PHP
php使用COPY函数更新配置文件的方法
2015/06/18 PHP
php使用mysqli和pdo扩展,测试对比连接mysql数据库的效率完整示例
2019/05/09 PHP
写给想学习Javascript的朋友一点学习经验小结
2010/11/23 Javascript
js 关键词高亮(根据ID/tag高亮关键字)案例介绍
2013/01/21 Javascript
js日期时间补零的小例子
2013/03/05 Javascript
Jquery实现弹出层分享微博插件具备动画效果
2013/04/03 Javascript
node.js中的fs.ftruncate方法使用说明
2014/12/15 Javascript
基于jQuery实现仿搜狐辩论投票动画代码(附源码下载)
2016/02/18 Javascript
Bootstrap弹出带合法性检查的登录框实例代码【推荐】
2016/06/23 Javascript
ajax+node+request爬取网络图片的实例(宅男福利)
2017/08/28 Javascript
js使用generator函数同步执行ajax任务
2017/09/05 Javascript
修改Nodejs内置的npm默认配置路径方法
2018/05/13 NodeJs
Vuejs开发环境搭建及热更新【推荐】
2018/09/07 Javascript
vue中使用better-scroll实现滑动效果及注意事项
2018/11/15 Javascript
微信小程序实现的一键连接wifi功能示例
2019/04/24 Javascript
vue通过过滤器实现数据格式化
2020/07/20 Javascript
Python多线程和队列操作实例
2015/06/21 Python
深入理解Python3中的http.client模块
2017/03/29 Python
Pandas标记删除重复记录的方法
2018/04/08 Python
python 删除指定时间间隔之前的文件实例
2018/04/24 Python
Python Cookie 读取和保存方法
2018/12/28 Python
深入浅析Python 中 is 语法带来的误解
2019/05/07 Python
Python使用pymysql模块操作mysql增删改查实例分析
2019/12/19 Python
flask框架自定义url转换器操作详解
2020/01/25 Python
详解Django自定义图片和文件上传路径(upload_to)的2种方式
2020/12/01 Python
详解pandas映射与数据转换
2021/01/22 Python
CSS3 2D模拟实现摩天轮旋转效果
2016/11/16 HTML / CSS
HTML5图片层叠的实现示例
2020/07/07 HTML / CSS
英国在线房屋中介网站:Yopa
2018/01/09 全球购物
英国比较机场停车场网站:Airport Parking Essentials
2019/12/01 全球购物
宗教学大学生职业生涯规划范文
2014/02/08 职场文书
幼儿园小班家长寄语
2014/04/02 职场文书
乡镇遵守党的政治纪律情况对照检查材料
2014/09/26 职场文书
关于golang高并发的实现与注意事项说明
2021/05/08 Golang
MongoDB数据库部署环境准备及使用介绍
2022/03/21 MongoDB