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 模拟$_PUT实现代码
Mar 15 PHP
按上下级层次关系输出内容的PHP代码
Jul 17 PHP
PHP+shell实现多线程的方法
Jul 01 PHP
yii2.0实现创建简单widgets示例
Jul 18 PHP
PHP5.5安装PHPRedis扩展及连接测试方法
Jan 22 PHP
ThinkPHP框架分布式数据库连接方法详解
Mar 14 PHP
php 类中的常量、静态属性、非静态属性的区别
Apr 09 PHP
LNMP部署laravel以及xhprof安装使用教程
Sep 14 PHP
PHP等比例压缩图片的实例代码
Jul 26 PHP
Laravel框架运行出错提示RuntimeException No application encryption key has been specified.解决方法
Apr 02 PHP
thinkphp 框架数据库切换实现方法分析
May 18 PHP
使用php的mail()函数实现发送邮件功能
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
不错的一篇面向对象的PHP开发模式(简写版)
2007/03/15 PHP
PHP 第二节 数据类型之字符串类型
2012/04/28 PHP
php中的注释、变量、数组、常量、函数应用介绍
2012/11/16 PHP
PHP 字符串长度判断效率更高的方法
2014/03/02 PHP
php检查字符串中是否包含7位GSM字符的方法
2015/03/17 PHP
PHP中的Trait 特性及作用
2016/04/03 PHP
JavaScript实现删除电脑的关机键
2016/07/26 PHP
php中文字符串截取多种方法汇总
2016/10/06 PHP
thinkPHP框架实现图像裁剪、缩放、加水印的方法
2017/03/14 PHP
使用jquery给input和textarea设定ie中的focus
2008/05/29 Javascript
JQuery团队打造的javascript单元测试工具QUnit介绍
2010/02/26 Javascript
用window.onerror捕获并上报Js错误的方法
2016/01/27 Javascript
js剪切板应用clipboardData实例解析
2016/05/29 Javascript
Vue.js开发环境搭建
2016/11/10 Javascript
详解微信小程序 wx.uploadFile 的编码坑
2017/01/23 Javascript
详解在Vue中通过自定义指令获取dom元素
2017/03/04 Javascript
nodejs socket实现的服务端和客户端功能示例
2017/06/02 NodeJs
浅谈Webpack自动化构建实践指南
2017/12/18 Javascript
vue+webpack 打包文件 404 页面空白的解决方法
2018/02/28 Javascript
vue.js 解决v-model让select默认选中不生效的问题
2020/07/28 Javascript
微信小程序wx.getUserInfo授权获取用户信息(头像、昵称)的实现
2020/08/19 Javascript
Python语言的面相对象编程方式初步学习
2016/03/12 Python
Python基础篇之初识Python必看攻略
2016/06/23 Python
Python读取图片属性信息的实现方法
2016/09/11 Python
HTML5新特性 多线程(Worker SharedWorker)
2017/04/24 HTML / CSS
信息技术专业大学生个人的自我评价
2013/10/05 职场文书
三查三看党性分析材料
2014/02/18 职场文书
团购业务员岗位职责
2014/03/15 职场文书
给小学生的新年寄语
2014/04/04 职场文书
2014年应急管理工作总结
2014/11/26 职场文书
医生辞职信范文
2015/03/02 职场文书
项目投资意向书范本
2015/05/09 职场文书
python单元测试之pytest的使用
2021/06/07 Python
纯html+css实现奥运五环的示例代码
2021/08/02 HTML / CSS
正则表达式拆分url实例代码
2022/02/24 Java/Android
Java中的Kafka为什么性能这么快及4大核心详析
2022/09/23 Java/Android