MENU

对json_encode() 函数理解

May 6, 2020 • 原创文章,PHP

如果将下面这段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"
}

汉字和链接都会完整的保留下来

Archives QR Code
QR Code for this page
Tipping QR Code

感谢以下平台提供云加速支持