PHP使用json_encode函数时不转义中文的解决方法


Posted in PHP onNovember 12, 2014

本文实例讲述了PHP使用json_encode函数时不转义中文的解决方法。分享给大家供大家参考。具体方法如下:

json_encode函数对于gbk中的中文字符是不会转换的或直接转换成空格了,本文就来给各位整理一个关于json不转义中文问题处理技巧,相信对大家有所帮助。

如果你调用 PHP 自带的 json_encode() 函数, 碰到中文时, 中文会被转义掉. 例如:

echo json_encode(array('你好'));

// 输出: ["\u4f60\u597d"]

这非常恼人, 像是一堆乱码, JSON 标准从来没有说要把非 ASCII 字符转义, 标准说的是”Any UNICODE character”.
如何禁用掉这种转义呢? 答案是, PHP 自带的 json_encode() 不能禁用这个特性(在 5.4.0 版本之前, 之后的版本你可以加 JSON_UNESCAPED_UNICODE 选项), 你只能换一个新的 JSON 库. 为了简单, 我简单写了几十行代码, 实现一个 json_encode().
class Util

{

    static function json_encode($input){

        // 从 PHP 5.4.0 起, 增加了这个选项.

        if(defined('JSON_UNESCAPED_UNICODE')){

            return json_encode($input, JSON_UNESCAPED_UNICODE);

        }

        if(is_string($input)){

            $text = $input;

            $text = str_replace('\\', '\\\\', $text);

            $text = str_replace(

                array("\r", "\n", "\t", "\""),

                array('\r', '\n', '\t', '\\"'),

                $text);

            return '"' . $text . '"';

        }else if(is_array($input) || is_object($input)){

            $arr = array();

            $is_obj = is_object($input) || (array_keys($input) !== range(0, count($input) - 1));

            foreach($input as $k=>$v){

                if($is_obj){

                    $arr[] = self::json_encode($k) . ':' . self::json_encode($v);

                }else{

                    $arr[] = self::json_encode($v);

                }

            }

            if($is_obj){

                return '{' . join(',', $arr) . '}';

            }else{

                return '[' . join(',', $arr) . ']';

            }

        }else{

            return $input . '';

        }

    }

}

考虑不到的地方, 例如判断关联数组(is_obj)的地方, 遇到问题再说. 你要是不喜欢类, 那就自己转成纯函数, 换个名字吧。

希望本文所述对大家的PHP程序设计有所帮助。

PHP 相关文章推荐
php echo 输出字符串函数详解
May 13 PHP
PHP备份数据库生成SQL文件并下载的函数代码
Feb 05 PHP
php打造属于自己的MVC框架
Mar 07 PHP
PHP中include与require使用方法区别详解
Oct 19 PHP
ThinkPHP结合ajax、Mysql实现的客户端通信功能代码示例
Jun 23 PHP
ThinkPHP模板Switch标签用法示例
Jun 30 PHP
php实现获取文件mime类型的方法
Feb 11 PHP
php抓取网站图片并保存的实现方法
Oct 29 PHP
PHP使用Pear发送邮件(Windows环境)
Jan 05 PHP
PHP5.6新增加的可变函数参数用法分析
Aug 25 PHP
php+ajax实现仿百度查询下拉内容功能示例
Oct 20 PHP
PHP实现单条sql执行多个数据的insert语句方法
Oct 11 PHP
php5.3提示Function ereg() is deprecated Error问题解决方法
Nov 12 #PHP
PHP中file_exists()判断中文文件名无效的解决方法
Nov 12 #PHP
php基于str_pad实现卡号不足位数自动补0的方法
Nov 12 #PHP
PHP利用func_get_args和func_num_args函数实现函数重载实例
Nov 12 #PHP
PHP之sprintf函数用法详解
Nov 12 #PHP
php中simplexml_load_file函数用法实例
Nov 12 #PHP
php实现的ping端口函数实例
Nov 12 #PHP
You might like
学习jquery之一
2007/04/27 Javascript
Google韩国首页图标动画效果
2007/08/26 Javascript
获取css样式表内样式的js函数currentStyle(IE),defaultView(FF)
2011/02/14 Javascript
jQuery图片预加载 等比缩放实现代码
2011/10/04 Javascript
javascript for循环从入门到偏门(效率优化+奇特用法)
2012/08/01 Javascript
Jquery实现的一种常用高亮效果示例代码
2014/01/28 Javascript
JS将光标聚焦在文本最后的实现代码
2014/03/28 Javascript
jquery实现点击文字可编辑并修改保存至数据库
2014/04/15 Javascript
jQuery基础知识点总结(DOM操作)
2016/06/01 Javascript
Bootstrap基本插件学习笔记之Alert警告框(20)
2016/12/08 Javascript
Vue中img的src属性绑定与static文件夹实例
2017/05/18 Javascript
vue toggle做一个点击切换class(实例讲解)
2018/03/13 Javascript
Angular中使用better-scroll插件的方法
2018/03/27 Javascript
iView-admin 动态路由问题的解决方法
2018/10/03 Javascript
微信小程序实现录音功能
2019/11/22 Javascript
Vue 实现显示/隐藏层的思路(加全局点击事件)
2019/12/31 Javascript
《javascript设计模式》学习笔记三:Javascript面向对象程序设计单例模式原理与实现方法分析
2020/04/07 Javascript
用Python实现一个简单的多线程TCP服务器的教程
2015/05/05 Python
Python中字典的基本知识初步介绍
2015/05/21 Python
在Python中操作时间之mktime()方法的使用教程
2015/05/22 Python
Python工程师面试题 与Python基础语法相关
2016/01/14 Python
Python集中化管理平台Ansible介绍与YAML简介
2019/06/12 Python
django之使用celery-把耗时程序放到celery里面执行的方法
2019/07/12 Python
Django rstful登陆认证并检查session是否过期代码实例
2019/08/13 Python
Jupyter notebook如何修改平台字体
2020/05/13 Python
Python进行统计建模
2020/08/10 Python
Python如何执行系统命令
2020/09/23 Python
基于HTML5 audio元素播放声音jQuery小插件
2011/05/11 HTML / CSS
加拿大知名的国际儿童品牌:Hatley
2016/11/09 全球购物
Java程序员面试题
2013/07/15 面试题
机械电子工程专业推荐信范文
2013/11/20 职场文书
个人求职信范文分享
2014/01/31 职场文书
新年主持词
2014/03/27 职场文书
财务会计专业自荐书
2014/06/30 职场文书
开展警示教育活动总结
2015/05/09 职场文书
Go语言安装并操作redis的go-redis库
2022/04/14 Golang