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 相关文章推荐
PHP中函数内引用全局变量的方法
Oct 20 PHP
php 显示指定路径下的图片
Oct 29 PHP
php调用方法mssql_fetch_row、mssql_fetch_array、mssql_fetch_assoc和mssql_fetch_objcect读取数据的区别
Aug 08 PHP
深入php多态的实现详解
Jun 09 PHP
PHP 数据结构队列(SplQueue)和优先队列(SplPriorityQueue)简单使用实例
May 12 PHP
PHP实现C#山寨ArrayList的方法
Jul 16 PHP
mysql desc(DESCRIBE)命令实例讲解
Sep 24 PHP
利用php抓取蜘蛛爬虫痕迹的示例代码
Sep 30 PHP
php获取指定数量随机字符串的方法
Feb 06 PHP
PHP二维关联数组的遍历方式(实例讲解)
Oct 18 PHP
Laravel 加载第三方类库的方法
Apr 20 PHP
PHP从零开始打造自己的MVC框架之入口文件实现方法详解
Jun 03 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
将文件夹压缩成zip文件的php代码
2009/12/14 PHP
php实现通过cookie换肤的方法
2015/07/13 PHP
jquery 学习之二 属性相关
2010/11/23 Javascript
jquery监控数据是否变化(修正版)
2011/04/12 Javascript
基于JQuery的动态删除Table表格的行和列的代码
2011/05/12 Javascript
仿新浪微博返回顶部的jquery实现代码
2012/10/01 Javascript
javascript中常用编程知识
2013/04/08 Javascript
单击浏览器右上角的X关闭窗口弹出提示的小例子
2013/06/12 Javascript
jquery 定位input元素的几种方法小结
2013/07/28 Javascript
js获取select标签的值且兼容IE与firefox
2013/12/30 Javascript
简单实现js选项卡切换效果
2016/02/03 Javascript
基于JavaScript实现五子棋游戏
2020/08/26 Javascript
vue打包相关细节整理(小结)
2018/09/28 Javascript
JavaScript私有变量实例详解
2019/01/24 Javascript
Electron + vue 打包桌面操作流程详解
2019/06/24 Javascript
javascript使用Blob对象实现的下载文件操作示例
2020/04/18 Javascript
Python爬虫框架Scrapy安装使用步骤
2014/04/01 Python
python使用线程封装的一个简单定时器类实例
2015/05/16 Python
python中星号变量的几种特殊用法
2016/09/07 Python
Python制作豆瓣图片的爬虫
2017/12/28 Python
python opencv之SURF算法示例
2018/02/24 Python
pycharm运行程序时在Python console窗口中运行的方法
2018/12/03 Python
Django中使用CORS实现跨域请求过程解析
2019/08/05 Python
TensorFlow 多元函数的极值实例
2020/02/10 Python
Java如何基于wsimport调用wcf接口
2020/06/17 Python
法国时尚品牌乐都特瑞士站:La Redoute瑞士
2016/09/05 全球购物
莫斯科高科技在线商店:KremlinStore
2019/03/13 全球购物
什么是唯一索引
2015/07/05 面试题
大学毕业生的自我鉴定
2013/11/30 职场文书
销售找工作求职信
2013/12/20 职场文书
团日活动策划书
2014/02/01 职场文书
超市采购员岗位职责
2014/02/01 职场文书
记账会计岗位职责
2014/06/16 职场文书
4S店销售内勤岗位职责
2015/04/13 职场文书
读《皮囊》有感:理解是对他人的最大的善举
2019/11/14 职场文书
MySQL聚簇索引和非聚簇索引的区别详情
2022/06/14 MySQL