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 相关文章推荐
APMServ使用说明
Oct 23 PHP
一段php加密解密的代码
Jul 16 PHP
php正则校验用户名介绍
Jul 19 PHP
php下将多个数组合并成一个数组的方法与实例代码
Feb 03 PHP
三个类概括PHP的五种设计模式
Sep 05 PHP
PHP中常用的字符串格式化函数总结
Nov 19 PHP
php目录遍历函数opendir用法实例
Nov 20 PHP
WordPress中用于获取文章信息以及分类链接的函数用法
Dec 18 PHP
PHP怎样用正则抓取页面中的网址
Aug 09 PHP
PHP foreach遍历多维数组实现方式
Nov 16 PHP
Laravel框架使用Seeder实现自动填充数据功能
Jun 13 PHP
PHP中类与对象功能、用法实例解读
Mar 27 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
smarty中js的调用方法示例
2014/10/27 PHP
php结合md5实现的加密解密方法
2016/01/25 PHP
PHP实现数组和对象的相互转换操作示例
2019/03/20 PHP
基于jquery自定义的漂亮单选按钮RadioButton
2013/11/19 Javascript
JavaScript实现的简单拖拽效果
2015/06/01 Javascript
Ajax中解析Json的两种方法对比分析
2015/06/25 Javascript
浅谈JavaScript中的字符编码转换问题
2015/07/07 Javascript
jQuery实现的多级下拉菜单效果代码
2015/08/24 Javascript
Extjs4.0 ComboBox如何实现三级联动
2016/05/11 Javascript
AngularJS封装指令方法详解
2016/12/12 Javascript
easyui combotree加载静态数据问题(选不上)解决方法
2016/12/26 Javascript
bootstrap为水平排列的表单和内联表单设置可选的图标
2017/02/15 Javascript
vue移动端裁剪图片结合插件Cropper的使用实例代码
2017/07/10 Javascript
vue中子组件向父组件传递数据的实例代码(实现加减功能)
2018/04/20 Javascript
详解nodejs 开发企业微信第三方应用入门教程
2019/03/12 NodeJs
vue过滤器用法实例分析
2019/03/15 Javascript
Postman无法正常返回结果问题解决
2020/08/28 Javascript
python脚本设置超时机制系统时间的方法
2016/02/21 Python
Python虚拟环境virtualenv的安装与使用详解
2017/05/28 Python
基于python 字符编码的理解
2017/09/02 Python
用Python实现筛选文件脚本的方法
2018/10/27 Python
Python入门Anaconda和Pycharm的安装和配置详解
2019/07/16 Python
django项目登录中使用图片验证码的实现方法
2019/08/15 Python
CSS3媒体查询Media Queries基础学习教程
2016/02/29 HTML / CSS
深入理解css属性的选择对动画性能的影响
2016/04/20 HTML / CSS
Java中compareTo和compare的区别
2016/04/12 面试题
大学毕业后的十年规划
2014/01/07 职场文书
劳动实践课感言
2014/02/01 职场文书
总经理文秘岗位职责
2014/02/03 职场文书
卖车协议书范例
2014/09/16 职场文书
2014年基层党支部工作总结
2014/12/04 职场文书
2014年小学教研工作总结
2014/12/06 职场文书
邀请函怎么写
2015/01/30 职场文书
2019年暑期法院实习报告
2019/12/18 职场文书
Opencv实现二维直方图的计算及绘制
2021/07/21 Python
利用nginx搭建RTMP视频点播、直播、HLS服务器
2022/05/25 Servers