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提取中文首字母
Apr 09 PHP
配置Apache2.2+PHP5+CakePHP1.2+MySQL5运行环境
Apr 25 PHP
php HtmlReplace输入过滤安全函数
Jul 03 PHP
php中引用符号(&)的使用详解
Nov 13 PHP
PHP自带ZIP压缩、解压缩类ZipArchiv使用指南
Mar 03 PHP
PHP下SSL加密解密、验证、签名方法(很简单)
Jun 28 PHP
PHP使用file_get_content设置头信息的方法
Feb 14 PHP
PHP加密技术的简单实现
Sep 04 PHP
thinkphp实现分页显示功能
Dec 03 PHP
Swoole 5将移除自动添加Event::wait()特性详解
Jul 10 PHP
laravel-admin 实现给grid的列添加行数序号的方法
Oct 08 PHP
laravel Model 执行事务的实现
Oct 10 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 session_start()关于Cannot send session cache limiter - headers already sent错误解决方法
2009/11/27 PHP
codeigniter教程之上传视频并使用ffmpeg转flv示例
2014/02/13 PHP
js宝典学习笔记(上)
2007/01/10 Javascript
基于jQuery的投票系统显示结果插件
2011/08/12 Javascript
JavaScript子窗口ModalDialog中操作父窗口对像
2012/12/11 Javascript
JS将秒换成时分秒实现代码
2013/09/03 Javascript
JavaScript之IE的fireEvent方法详细解析
2013/11/20 Javascript
可插入图片的TEXT文本框
2013/12/27 Javascript
ext中store.load跟store.reload的区别示例介绍
2014/06/17 Javascript
包含中国城市的javascript对象实例
2015/08/03 Javascript
jQuery简单实现input文本框内灰色提示文本效果的方法
2015/12/02 Javascript
Boostrap基础教程之JavaScript插件篇
2016/09/08 Javascript
解决在vue+webpack开发中出现两个或多个菜单公用一个组件问题
2017/11/28 Javascript
react-router4按需加载(踩坑填坑)
2019/01/06 Javascript
js找出5个数中最大的一个数和倒数第二大的数实现方法示例小结
2020/03/04 Javascript
vuex中遇到的坑,vuex数据改变,组件中页面不渲染操作
2020/11/16 Javascript
Python实现将DOC文档转换为PDF的方法
2015/07/25 Python
Python验证码识别处理实例
2015/12/28 Python
Python+OpenCV人脸检测原理及示例详解
2020/10/19 Python
python读取txt文件,去掉空格计算每行长度的方法
2018/12/20 Python
Python异常处理知识点总结
2019/02/18 Python
解决Django中多条件查询的问题
2019/07/18 Python
python实现取余操作的简单实例
2020/08/16 Python
详解CSS3中nth-child与nth-of-type的区别
2017/01/05 HTML / CSS
Kneipp克奈圃美国官网:德国百年精油配方的传承
2018/02/07 全球购物
东方通信股份有限公司VC面试题
2014/08/27 面试题
护士自我鉴定
2013/10/23 职场文书
质量月活动策划方案
2014/03/10 职场文书
四年级学生评语大全
2014/04/21 职场文书
乡镇干部个人对照检查材料(群众路线)
2014/09/26 职场文书
初中家长意见
2015/06/03 职场文书
员工离职证明范本
2015/06/12 职场文书
民事纠纷协议书
2016/03/23 职场文书
Python文件的操作示例的详细讲解
2021/04/08 Python
Python机器学习之KNN近邻算法
2021/05/14 Python
SQL Server内存机制浅探
2022/04/06 SQL Server