解决PHP json_encode() 编码字符中包含<>时,转化为\u003E\u003C

举报
lxw1844912514 发表于 2022/03/28 00:43:16 2022/03/28
【摘要】 一、PHP json_encode里面经常用到的 JSON_UNESCAPED_UNICODE和JSON_UNESCAPED_SLASHES php格式化json的函数 json_encode($value,$options) 其中有2个比较常用到的参数 JSON_UNESCAPED_UNICODE(中文不转...

一、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个常量。


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

方法二: 


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

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

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


  
  1. 1 <?php
  2. 2 /*
  3. 3 php中让json_encode不自动转义斜杠“/”
  4. 4 */
  5. 5 $a = array(
  6. 6 'http://www.baidu.com',
  7. 7 'http://www.baidu.com',
  8. 8 'http://www.baidu.com',
  9. 9 'http://www.baidu.com',
  10. 10 'http://www.baidu.com'
  11. 11 );
  12. 12 // 其一 正则替换
  13. 13 $a = str_replace("\\/", "/", json_encode($a));
  14. 14 var_dump($a);
  15. 15 // 其二 php版本>5.4
  16. 16 var_dump(json_encode($a,JSON_UNESCAPED_SLASHES));
三、接下来看一下第二个参数:  options参考选自

  
  1.         JSON_HEX_TAG (integer)    所有的 <> 转换成 \u003C 和 \u003E。 自 PHP 5.3.0 起生效。
  2.         JSON_HEX_AMP (integer)    所有的 & 转换成 \u0026。 自 PHP 5.3.0 起生效。
  3.         JSON_HEX_APOS (integer)   所有的 ' 转换成 \u0027。 自 PHP 5.3.0 起生效。
  4.         JSON_HEX_QUOT (integer)   所有的 " 转换成 \u0022。 自 PHP 5.3.0 起生效。
  5.         JSON_FORCE_OBJECT (integer)     使一个非关联数组输出一个类(Object)而非数组。 在数组为空而接受者需要一个类                (Object)的时候尤其有用。 自 PHP 5.3.0 起生效。
  6.         JSON_NUMERIC_CHECK (integer)    将所有数字字符串编码成数字(numbers)。 自 PHP 5.3.3 起生效。
  7.         JSON_BIGINT_AS_STRING (integer)    将大数字编码成原始字符原来的值。 自 PHP 5.4.0 起生效。
  8.         JSON_PRETTY_PRINT (integer)    用空白字符格式化返回的数据。 自 PHP 5.4.0 起生效。
  9.         JSON_UNESCAPED_SLASHES (integer)    不要编码 /。 自 PHP 5.4.0 起生效。
  10.         JSON_UNESCAPED_UNICODE (integer)     以字面编码多字节 Unicode 字符(默认是编码成 \uXXXX)。 自 PHP 5.4.0 起生效。

文章来源: blog.csdn.net,作者:lxw1844912514,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/lxw1844912514/article/details/121291436

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。