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 相关文章推荐
Zend公司全球首推PHP认证
Oct 09 PHP
PHP 单引号与双引号的区别
Nov 24 PHP
php笔记之:php数组相关函数的使用
Apr 26 PHP
php递归函数中使用return的注意事项
Jan 17 PHP
php解决抢购秒杀抽奖等大流量并发入库导致的库存负数的问题
Jun 19 PHP
php ci框架中加载css和js文件失败的原因及解决方法
Jul 29 PHP
php动态绑定变量的用法
Jun 16 PHP
Symfony2在Nginx下的配置方法图文教程
Feb 04 PHP
PHP Try-catch 语句使用技巧
Feb 28 PHP
PHP 极验验证码实例讲解
Sep 29 PHP
PHP 500报错的快速解决方法
Dec 14 PHP
Windows服务器中PHP如何安装redis扩展
Sep 27 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
PHP常量使用的几个需要注意的地方(谨慎使用PHP中的常量)
2014/09/12 PHP
php猜单词游戏
2015/09/29 PHP
基于thinkPHP3.2实现微信接入及查询token值的方法
2017/04/18 PHP
jquery 延迟执行实例介绍
2013/08/20 Javascript
JS连连看源码完美注释版(推荐)
2013/12/09 Javascript
Javascript的setTimeout()使用闭包特性时需要注意的问题
2014/09/23 Javascript
微信浏览器内置JavaScript对象WeixinJSBridge使用实例
2015/05/25 Javascript
谈谈JavaScript异步函数发展历程
2015/09/29 Javascript
EasyUI 结合JS导出Excel文件的实现方法
2016/11/10 Javascript
AngularJS 文件上传控件 ng-file-upload详解
2017/01/13 Javascript
Ionic2调用本地SQlite实例
2017/04/22 Javascript
jQuery实现在HTML文档加载完毕后自动执行某个事件的方法
2017/05/08 jQuery
基于jQuery的表单填充实例
2017/08/22 jQuery
Node.js如何使用Diffie-Hellman密钥交换算法详解
2017/09/05 Javascript
JS开发自己的类库实例分析
2019/08/28 Javascript
解决谷歌搜索技术文章时打不开网页问题的python脚本
2013/02/10 Python
Python 常用string函数详解
2016/05/30 Python
python打包压缩、读取指定目录下的指定类型文件
2018/04/12 Python
深入了解Python枚举类型的相关知识
2019/07/09 Python
python PyQt5/Pyside2 按钮右击菜单实例代码
2019/08/17 Python
Python在OpenCV里实现极坐标变换功能
2019/09/02 Python
python安装本地whl的实例步骤
2019/10/12 Python
Python 窗体(tkinter)下拉列表框(Combobox)实例
2020/03/04 Python
python 安装教程之Pycharm安装及配置字体主题,换行,自动更新
2020/03/13 Python
Java如何基于wsimport调用wcf接口
2020/06/17 Python
CSS3解析抖音LOGO制作的方法步骤
2019/04/11 HTML / CSS
德国便宜的宠物店:Brekz.de
2020/10/23 全球购物
初中科学教学反思
2014/01/21 职场文书
医学类个人求职信范文
2014/02/05 职场文书
元宵节主持词
2014/03/25 职场文书
房产转让协议书
2014/04/11 职场文书
员工家属慰问信
2015/03/24 职场文书
留学推荐信中文范文
2015/03/26 职场文书
工作经历证明范本
2015/06/15 职场文书
postman中form-data、x-www-form-urlencoded、raw、binary的区别介绍
2022/01/18 HTML / CSS
MySQL数据库之存储过程 procedure
2022/06/16 MySQL