php5.4以下版本json不支持不转义内容中文的解决方法


Posted in PHP onJanuary 13, 2015

本文实例讲述了php5.4以下版本json不支持不转义内容中文的解决方法。分享给大家供大家参考。具体分析如下:

写ERP接口的时候遇到JAVA方接收这种json_encode后的内容

{"orderCode":"1401160935542399","creator":"\u751f\u6d3b\u7528\u54c1\u6d4b\u8bd5\u5c0f\u5c4b"}

其中"creator":"\u751f\u6d3b\u7528\u54c1\u6d4b\u8bd5\u5c0f\u5c4b"为中文,目前我们用的是UTF8的。但是JAVA方接收这种的时候自动把转义后的中文转回成中文的,那签名计算方式是按这个来的,签名自然对不上了。

查了PHP手册,5.4以下的不能不转义中文,但是我们服务器上的PHP版本是5.3的,于是用PHP模拟了一个JSON方法。

//模拟joson中文不转义

if (version_compare(PHP_VERSION, '5.4.0') >= 0) {

    function json_encode_ex($var) {

        return json_encode($var, JSON_UNESCAPED_UNICODE);

    }

} else {

    function json_encode_ex($var) {

        if ($var === null)

            return 'null';
        if ($var === true)

            return 'true';
        if ($var === false)

            return 'false';
        static $reps = array(

            array("\\", "/", "\n", "\t", "\r", "\b", "\f", '"', ),

            array('\\\\', '\\/', '\\n', '\\t', '\\r', '\\b', '\\f', '\"', ),

        );
        if (is_scalar($var))

            return '"' . str_replace($reps[0], $reps[1], (string) $var) . '"';
        if (!is_array($var))

            throw new Exception('JSON encoder error!');
        $isMap = false;

        $i = 0;

        foreach (array_keys($var) as $k) {

            if (!is_int($k) || $i++ != $k) {

                $isMap = true;

                break;

            }

        }
        $s = array();
        if ($isMap) {

            foreach ($var as $k => $v)

                $s[] = '"' . $k . '":' . call_user_func(__FUNCTION__, $v);
            return '{' . implode(',', $s) . '}';

        } else {

            foreach ($var as $v)

                $s[] = call_user_func(__FUNCTION__, $v);
            return '[' . implode(',', $s) . ']';

        }

    }

}

用的时候直接当内置函数用就行。json_encode_ex(array('钓鱼岛'=>'中国的'));还支持多维数组。

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

PHP 相关文章推荐
模仿OSO的论坛(四)
Oct 09 PHP
按上下级层次关系输出内容的PHP代码
Jul 17 PHP
php连接mssql数据库的几种方法
Feb 21 PHP
解析使用substr截取UTF-8中文字符串出现乱码的问题
Jun 20 PHP
ThinkPHP中I(),U(),$this->post()等函数用法
Nov 22 PHP
PHP使用array_merge重新排列数组下标的方法
Jul 22 PHP
ZF框架实现发送邮件的方法
Dec 03 PHP
php使用number_format函数截取小数的方法分析
May 27 PHP
php版微信公众平台接口参数调试实现判断用户行为的方法
Sep 23 PHP
golang 调用 php7详解及实例
Jan 04 PHP
ThinkPHP防止重复提交表单的方法实例分析
May 10 PHP
php生成二维码不保存服务器还有下载功能的实现代码
Aug 09 PHP
php正则匹配html中带class的div并选取其中内容的方法
Jan 13 #PHP
PHP针对JSON操作实例分析
Jan 12 #PHP
php页面缓存方法小结
Jan 10 #PHP
php中异常处理方法小结
Jan 09 #PHP
PHP中浮点数计算比较及取整不准确的解决方法
Jan 09 #PHP
php模拟登陆的实现方法分析
Jan 09 #PHP
php获取四位字母和数字的随机数的实现方法
Jan 09 #PHP
You might like
php5数字型字符串加解密代码
2008/04/24 PHP
php遍历目录viewDir函数
2009/12/15 PHP
PHP的一个完美GIF等比缩放类,附带去除缩放黑背景
2014/04/01 PHP
php中unserialize返回false的解决方法
2014/09/22 PHP
基于ThinkPHP5.0实现图片上传插件
2017/09/25 PHP
PHP date()格式MySQL中插入datetime方法
2019/01/29 PHP
JavaScript 应用技巧集合[推荐]
2009/08/30 Javascript
JS特权方法定义作用以及与公有方法的区别
2013/03/18 Javascript
枚举的实现求得1-1000所有出现1的数字并计算出现1的个数
2013/09/10 Javascript
基于javascript实现浏览器滚动条快到底部时自动加载数据
2015/11/30 Javascript
Javascript基础学习笔记(菜鸟必看篇)
2016/07/22 Javascript
vue.js 嵌套循环、if判断、动态删除的实例
2018/03/07 Javascript
Angular通过指令动态添加组件问题
2018/07/09 Javascript
巧妙运用v-model实现父子组件传值的方法示例
2019/04/07 Javascript
基于Layui自定义模块的使用方法详解
2019/09/14 Javascript
修改Vue打包后的默认文件名操作
2020/08/12 Javascript
三剑客:offset、client和scroll还傻傻分不清?
2020/12/04 Javascript
[03:48]2014DOTA2 TI专访71DK夺冠不靠小组赛高排名
2014/07/11 DOTA
[01:33:07]VGJ.T vs Newbee Supermajor 败者组 BO3 第一场 6.6
2018/06/07 DOTA
浅析Python中的多条件排序实现
2016/06/07 Python
python多任务及返回值的处理方法
2019/01/22 Python
Django实现将views.py中的数据传递到前端html页面,并展示
2020/03/16 Python
使用Python三角函数公式计算三角形的夹角案例
2020/04/15 Python
3种适用于Python的疯狂秘密武器及原因解析
2020/04/29 Python
浅谈python锁与死锁问题
2020/08/14 Python
pycharm + django跨域无提示的解决方法
2020/12/06 Python
使用简单的CSS3属性实现炫酷读者墙效果
2014/01/08 HTML / CSS
欧迪办公美国官网:Office Depot
2016/08/22 全球购物
英国最大的老式糖果店:A Quarter Of
2017/04/08 全球购物
异常和异常类的概念
2014/09/12 面试题
大学生学雷锋活动总结
2014/06/26 职场文书
上班迟到检讨书300字
2014/10/18 职场文书
介绍信样本
2015/01/31 职场文书
React中的Context应用场景分析
2021/06/11 Javascript
python 远程执行命令的详细代码
2022/02/15 Python
python pandas 解析(读取、写入)CSV 文件的操作方法
2022/12/24 Python