当前位置: 首页 > 编程笔记 >

PHP使用json_encode函数时不转义中文的解决方法

李森
2023-03-14
本文向大家介绍PHP使用json_encode函数时不转义中文的解决方法,包括了PHP使用json_encode函数时不转义中文的解决方法的使用技巧和注意事项,需要的朋友参考一下

本文实例讲述了PHP使用json_encode函数时不转义中文的解决方法。分享给大家供大家参考。具体方法如下:

json_encode函数对于gbk中的中文字符是不会转换的或直接转换成空格了,本文就来给各位整理一个关于json不转义中文问题处理技巧,相信对大家有所帮助。

如果你调用 PHP 自带的 json_encode() 函数, 碰到中文时, 中文会被转义掉. 例如:

echo json_encode(array('你好'));

// 输出: ["\u4f60\u597d"]

这非常恼人, 像是一堆乱码, JSON 标准从来没有说要把非 ASCII 字符转义, 标准说的是”Any UNICODE character”.
如何禁用掉这种转义呢? 答案是, PHP 自带的 json_encode() 不能禁用这个特性(在 5.4.0 版本之前, 之后的版本你可以加 JSON_UNESCAPED_UNICODE 选项), 你只能换一个新的 JSON 库. 为了简单, 我简单写了几十行代码, 实现一个 json_encode().
class Util

{

    static function json_encode($input){

        // 从 PHP 5.4.0 起, 增加了这个选项.

        if(defined('JSON_UNESCAPED_UNICODE')){

            return json_encode($input, JSON_UNESCAPED_UNICODE);

        }

        if(is_string($input)){

            $text = $input;

            $text = str_replace('\\', '\\\\', $text);

            $text = str_replace(

                array("\r", "\n", "\t", "\""),

                array('\r', '\n', '\t', '\\"'),

                $text);

            return '"' . $text . '"';

        }else if(is_array($input) || is_object($input)){

            $arr = array();

            $is_obj = is_object($input) || (array_keys($input) !== range(0, count($input) - 1));

            foreach($input as $k=>$v){

                if($is_obj){

                    $arr[] = self::json_encode($k) . ':' . self::json_encode($v);

                }else{

                    $arr[] = self::json_encode($v);

                }

            }

            if($is_obj){

                return '{' . join(',', $arr) . '}';

            }else{

                return '[' . join(',', $arr) . ']';

            }

        }else{

            return $input . '';

        }

    }

}

考虑不到的地方, 例如判断关联数组(is_obj)的地方, 遇到问题再说. 你要是不喜欢类, 那就自己转成纯函数, 换个名字吧。

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

 类似资料:
  • 本文向大家介绍php中json_encode不兼容JSON_UNESCAPED_UNICODE的解决方案,包括了php中json_encode不兼容JSON_UNESCAPED_UNICODE的解决方案的使用技巧和注意事项,需要的朋友参考一下 PHP5.4才支持JSON_UNESCAPED_UNICODE这个参数,此参数是让中文字符在json_encode的时候不用转义,减少数据传输量。但在PHP

  • 本文向大家介绍PHP中函数gzuncompress无法使用的解决方法,包括了PHP中函数gzuncompress无法使用的解决方法的使用技巧和注意事项,需要的朋友参考一下 前言 gzuncompress函数不是php自带的系统函数而是一个插件函数了所以要使用 gzuncompress函数我们必须安装一个插件,下面来看看PHP函数gzuncompress无法使用的问题解决办法吧。 一、解决过程 1.

  • 本文向大家介绍php使用escapeshellarg时中文被过滤的解决方法,包括了php使用escapeshellarg时中文被过滤的解决方法的使用技巧和注意事项,需要的朋友参考一下 本文分析了php使用escapeshellarg时中文被过滤的解决方法。分享给大家供大家参考。具体如下: 一、问题: 同样的代码,发现通过 localhost/index.php 访问,和在 shell 中通过 ph

  • 本文向大家介绍PHP中iconv函数转码时截断字符问题的解决方法,包括了PHP中iconv函数转码时截断字符问题的解决方法的使用技巧和注意事项,需要的朋友参考一下 iconv是转换编码的,但是在中文转码时候出现显示不全问题。    或者用mb_convert_encoding()   保险就用mb_conver_encoding 

  • 本文向大家介绍PHP使用strrev翻转中文乱码问题的解决方法,包括了PHP使用strrev翻转中文乱码问题的解决方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了PHP使用strrev翻转中文乱码问题的解决方法。分享给大家供大家参考,具体如下: 在用PHP中的strrve翻转中文时,会出现乱码情况 例如: 运行结果为: 解决方法就是自己重写一个cnstrrev的函数 运行结果为: 更多

  • 问题内容: 我需要将JavaScript函数编码为PHP中的JSON对象。 这个: 输出: 我想要的是: 我可以使用json_encode吗? 问题答案: 正如Jani所说,这无法直接通过JSON进行,但这可能对您有帮助:http : //web.archive.org/web/20080828165256/http : //solutoire.com/2008/06/12/sending- ja