zoukankan      html  css  js  c++  java
  • 解决PHP json_encode() 编码字符中包含<>时,转化为\u003E\u003C

    一、PHP json_encode里面经常用到的 JSON_UNESCAPED_UNICODE和JSON_UNESCAPED_SLASHES

    php格式化json的函数

    json_encode($value,$options)

    其中有2个比较常用到的参数

    JSON_UNESCAPED_UNICODE(中文不转为unicode ,对应的数字 256

    JSON_UNESCAPED_SLASHES (不转义反斜杠,对应的数字 64

    通常json_encode只能传入一个常量,如果同时使用2个常量怎么办?

    方法一:

    JSON_UNESCAPED_UNICODE + JSON_UNESCAPED_SLASHES = 320

    使用方法:json_encode($arr,320);即可完成同时使用2个常量。

    <?php
    
    $arr = array('key'=>'中文/同时生效');
    echo json_encode($arr,320);  //输出{"key":"中文/同时生效"}
    
    $arr = array('key'=>'中文/同时生效');
    //默认中文斜杠都会转义
    echo json_encode($arr) ."\n";   //输出{"key":"\u4e2d\u6587\/\u540c\u65f6\u751f\u6548"}
    
    //中文不转为unicode 
    echo json_encode($arr,256)."\n";//输出{"key":"中文\/同时生效"}
    
    //不转义斜杠
    echo json_encode($arr,64)."\n"; //输出{"key":"\u4e2d\u6587/\u540c\u65f6\u751f\u6548"}
    
    //中文斜杠都不转义
    echo json_encode($arr,320)."\n";//输出{"key":"中文/同时生效"}
    
    

    方法二: 

    $arr2 = [ 'a' => '你好', 'b'=> 'aaa/bbb\' ];
    echo json_encode($arr2, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);

    二、php中让json_encode不自动转义斜杠“/”

    最近将使用爬虫爬取的链接保存到 mysql 数据库中时,发现我将链接使用 json_encode 保存时候,在数据库中却显示了转义字符,我并不需要这转义的,看起来不清晰而且占用存储空间。

     1 <?php
     2 /*
     3 php中让json_encode不自动转义斜杠“/”
     4  */
     5 $a = array(
     6     'http://www.baidu.com',
     7     'http://www.baidu.com',
     8     'http://www.baidu.com',
     9     'http://www.baidu.com',
    10     'http://www.baidu.com'
    11 );
    12 // 其一 正则替换
    13 $a = str_replace("\\/", "/", json_encode($a));
    14 var_dump($a);
    15 // 其二 php版本>5.4
    16 var_dump(json_encode($a,JSON_UNESCAPED_SLASHES));
    三、接下来看一下第二个参数:  options参考选自
    
            JSON_HEX_TAG (integer)    所有的 < 和 > 转换成 \u003C 和 \u003E。 自 PHP 5.3.0 起生效。
    
            JSON_HEX_AMP (integer)    所有的 & 转换成 \u0026。 自 PHP 5.3.0 起生效。
    
            JSON_HEX_APOS (integer)   所有的 ' 转换成 \u0027。 自 PHP 5.3.0 起生效。
    
            JSON_HEX_QUOT (integer)   所有的 " 转换成 \u0022。 自 PHP 5.3.0 起生效。
    
            JSON_FORCE_OBJECT (integer)     使一个非关联数组输出一个类(Object)而非数组。 在数组为空而接受者需要一个类                (Object)的时候尤其有用。 自 PHP 5.3.0 起生效。
    
            JSON_NUMERIC_CHECK (integer)    将所有数字字符串编码成数字(numbers)。 自 PHP 5.3.3 起生效。
    
            JSON_BIGINT_AS_STRING (integer)    将大数字编码成原始字符原来的值。 自 PHP 5.4.0 起生效。
    
            JSON_PRETTY_PRINT (integer)    用空白字符格式化返回的数据。 自 PHP 5.4.0 起生效。
    
            JSON_UNESCAPED_SLASHES (integer)    不要编码 /。 自 PHP 5.4.0 起生效。
    
            JSON_UNESCAPED_UNICODE (integer)     以字面编码多字节 Unicode 字符(默认是编码成 \uXXXX)。 自 PHP 5.4.0 起生效。

  • 相关阅读:
    关于JQ中的extend及扩展
    获取javabean 属性,类型,值
    Go调度器系列(3)图解调度原理
    grpcgateway使用教程
    MySQL 自增主键为啥不是连续递增
    Go调度器系列(2)宏观看调度器
    golang中defer,panic,recover的用法
    vue项目通过nginx部署在子目录
    Go调度器系列(1)起源
    Golang GPM 模型剖析
  • 原文地址:https://www.cnblogs.com/lxwphp/p/15847735.html
Copyright © 2011-2022 走看看