如果将下面这段JSON 直接使用json_encode输出的话
{
"code": "200",
"msg": "success",
"content": "我是木小果!",
"links": "https://api.muxiaoguo.cn"
}
会是这样的
{
"code": "200",
"msg": "success",
"content": "\u6211\u662f\u6728\u5c0f\u679c!",
"links": "https:\/\/api.muxiaoguo.cn"
}
汉字与/符号都会被转义,如果不想汉字和/被转义那要怎么解决呢?
首先我们要知道的是json_encode($value,$options)有两个参数
分别是
- value: 要编码的值。该函数只对 UTF-8 编码的数据有效。
- options:由以下常量组成的二进制掩码:JSON_HEX_QUOT, JSON_HEX_TAG, JSON_HEX_AMP, JSON_HEX_APOS, JSON_NUMERIC_CHECK,JSON_PRETTY_PRINT, JSON_UNESCAPED_SLASHES, JSON_FORCE_OBJECT
$options参数中有两个经常用到的常量
JSON_UNESCAPED_UNICODE(中文不转为unicode ,对应的数字 256)
JSON_UNESCAPED_SLASHES(不转义反斜杠,对应的数字 64)
如果在$options参数上填JSON_UNESCAPED_UNICODE返回的内容将会是这样的
{
"code": "200",
"msg": "success",
"content": "我是木小果!",
"links": "https:\/\/api.muxiaoguo.cn"
}
如果在$options参数上填JSON_UNESCAPED_SLASHES返回的内容将会是这样的(注意看链接部分)
{
"code": "200",
"msg": "success",
"content": "\u6211\u662f\u6728\u5c0f\u679c!",
"links": "https://api.muxiaoguo.cn"
}
那么不可以两项都不转义吗?答案当然是可以的,这也是我在网络上收集的资料。
上面有提到JSON_UNESCAPED_UNICODE对应的数字 256,JSON_UNESCAPED_SLASHES对应的数字 264
那么我们把它们加起来得到的和为320,这时候在$options参数上填写320即可得到下面这样的结果
{
"code": "200",
"msg": "success",
"content": "我是木小果!",
"links": "https://api.muxiaoguo.cn"
}
汉字和链接都会完整的保留下来