解决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 起生效。
赞赏码


非学,无以致疑;非问,无以广识
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
2018-01-26 phpstudy php5.4以上版本伪静态设置 thinkphp
2018-01-26 phpstudy php5.4以上版本伪静态设置 thinkphp
2018-01-26 GitHub上传文件不能超过100M的解决办法
2018-01-26 GitHub上传文件不能超过100M的解决办法
2018-01-26 用thinkphp开启伪静态,用wamp开启很快搞定;但是用phpstudy总是开启失败,为什么?...
2018-01-26 用thinkphp开启伪静态,用wamp开启很快搞定;但是用phpstudy总是开启失败,为什么?