在 PHP 中,json_encode() 函数用于将 PHP 变量(通常是数组或对象)编码为 JSON 格式的字符串。json_encode($arr) 和 json_encode($arr, 320) 的区别主要在于第二个参数,该参数是一个由多个 JSON_* 常量按位或(|)组合而成的选项掩码,用于控制编码过程中的行为。
1. json_encode($arr)
当只传递一个参数时,即 json_encode($arr),它使用默认的编码选项对数组 $arr 进行编码。默认情况下,json_encode() 会将数组编码为标准的 JSON 字符串,遵循 JSON 规范。例如:
$arr = array('name' => 'John', 'age' => 30);
$json = json_encode($arr);
echo $json;
// 输出: {"name":"John","age":30}
2. json_encode($arr, 320)
json_encode($arr, 320) 传递了第二个参数 320,这个数字实际上是两个 JSON_* 常量的按位或结果:JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES。
JSON_UNESCAPED_UNICODE(常量值为 256):在默认情况下,json_encode()会将非 ASCII 字符转义为\uXXXX格式。而使用JSON_UNESCAPED_UNICODE选项后,非 ASCII 字符将以原始的 UTF-8 编码形式输出。JSON_UNESCAPED_SLASHES(常量值为 64):默认情况下,json_encode()会对斜杠(/)进行转义,变为\/。使用JSON_UNESCAPED_SLASHES选项后,斜杠将不会被转义。
因此,320 = 256 + 64,即 JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES。示例代码如下:
$arr = array('name' => '张三','url' => 'https://example.com'
);// 默认编码
$defaultJson = json_encode($arr);
echo "默认编码: $defaultJson\n";
// 输出: {"name":"\u5f20\u4e09","url":"https:\/\/example.com"}// 使用 320 选项编码
$optionJson = json_encode($arr, 320);
echo "使用 320 选项编码: $optionJson\n";
// 输出: {"name":"张三","url":"https://example.com"}
总结
json_encode($arr)使用默认选项进行编码,可能会对非 ASCII 字符和斜杠进行转义。json_encode($arr, 320)使用JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES选项,非 ASCII 字符以原始 UTF-8 形式输出,斜杠不被转义。
