合并“特殊”Unicode 字符时,它们在编码为 JSON 后通常会出现扭曲:
echo json_encode(['foo' => '馬']); // Output: {"foo":"\u99ac"}
理解为什么会发生这种情况是至关重要。
JSON 编码标准
JSON 编码利用 ECMAScript(以前称为 JavaScript)字符串文字形成(第 7.8.4 节)。它允许将字符表示为以“u”为前缀的十六进制数字,后跟代表代码点的四个十六进制数字:
"\u99ac"
此表示与字符串文字“马”相同,传达相同的 Unicode由兼容的 JSON 解析器解析时的字符。
PHP 的 JSON 编码首选项
PHP 的 json_encode 函数通常使用“u...”转义序列对非 ASCII 字符进行编码。虽然这是可选的,但它会生成有效的 JSON。
自定义编码
如果需要,PHP 5.4 中引入的 JSON_UNESCAPED_UNICODE 标志允许文字字符编码:
echo json_encode(['foo' => '馬'], JSON_UNESCAPED_UNICODE); // Output: {"foo":"馬"}
需要注意的是,这种定制是一种偏好,而不是传输的必要条件JSON 中的 Unicode 字符。
以上是为什么特殊的Unicode字符在JSON编码后会出现扭曲?的详细内容。更多信息请关注PHP中文网其他相关文章!