3 回答
TA贡献1784条经验 获得超7个赞
JSON规范要求解码器支持UTF-8。结果,所有JSON解码器都可以处理UTF-8,也可以处理数字转义序列。Java解释器也是如此,这意味着JSONP也将处理UTF-8编码的JSON。
JSON编码器使用数字转义序列的功能只是为您提供了更多选择。选择数字转义序列的一个原因是,如果编码器和预期的解码器之间的传输机制不是二进制安全的。
你可能想要使用数字转义序列的另一个原因是为了防止出现在流中的某些字符,例如<
,&
和"
,如果JSON代码被置于不逃逸到HTML或错误地将其解释浏览器作为HTML,其可被解释为HTML序列。这可以抵御HTML注入或跨站点脚本的攻击(注意:某些字符必须在JSON中转义,包括"
和\
)。
一些框架,包括PHP的JSON实现,总是在编码器端对ASCII以外的任何字符执行数字转义序列。这旨在与有限的传输机制等实现最大的兼容性。但是,这不应解释为JSON解码器在UTF-8上存在问题的指示。
因此,我想您可以像这样决定使用哪个:
除非您的编码器和解码器之间的存储或传输方法不是二进制安全的,否则请仅使用UTF-8。
否则,请使用数字转义序列。
TA贡献1824条经验 获得超6个赞
我在那里有问题。当我使用“é”等字符对字符串进行JSON编码时,除IE会返回“ \ u00e9”外,每个浏览器都将返回相同的“é”。
然后使用PHP json_decode(),如果找到“é”,它将失败,因此对于Firefox,Opera,Safari和Chrome,我必须在json_decode()之前调用utf8_encode()。
注意:在我的测试中,IE和Firefox使用的是本机JSON对象,其他浏览器使用的是json2.js。
TA贡献2019条经验 获得超9个赞
ASCII不再存在。使用UTF-8编码意味着您没有使用ASCII编码。您应该使用转义机制的是RFC所说的:
除必须转义的字符外,所有Unicode字符都可以放在引号内:引号,反斜线和控制字符(U + 0000至U + 001F)
- 3 回答
- 0 关注
- 635 浏览
添加回答
举报