![](/img/trans.png)
[英]Why does the jQuery JSON parser need double escaping for backslashes?
[英]Why aren't double quotes and backslashes allowed in strings in the JSON standard?
如果我在Chrome或Firebug的JavaScript控制台中运行此程序,则效果很好。
JSON.parse('"\u0027"') // Escaped single-quote
但是,如果我在Javascript控制台中运行这两行中的任何一行,则会引发错误。
JSON.parse('"\u0022"') // Escaped double-quote
JSON.parse('"\u005C"') // Escaped backslash
RFC 4627第2.5节似乎暗示只要正确转义就允许使用\\
和"
字符。但是,我尝试过的2种浏览器似乎不允许这样做。但是,我做错了什么吗?在这里还是真的不允许它们在字符串中?我也尝试过分别使用\\"
和\\\\
代替"
和\\
。
我觉得我做错了什么,因为我很难相信JSON不允许在字符串中使用这些字符,特别是因为规范似乎没有提到我可以发现说不允许使用的任何内容。
您需要引用反斜杠!
我们称之为玫瑰的
用别的名字闻起来会很甜
无论您如何在字符串常量中表达双引号,双引号都是双引号。 如果在常量中的
\\u\u003c/code>表达式前加上反斜杠,则效果就是反斜杠引号的双引号,实际上就是您所拥有的。
关于您的问题最有趣的事情是,它可以帮助我认识到我编写的每个JavaScript字符串解析器都是错误的。
JavaScript会在到达JSON解析器之前解释Unicode转义序列。 这带来了一个问题:
第一次未用JavaScript引用'"\'"'
: "'"
第二次(通过JSON解析器)作为有效JSON表示字符串: '
第一次未用JavaScript '"""'
: """
JSON解析器将此未加引号的版本"""
视为无效JSON(不希望最后一个引号)。
第一次未用引号将'"\\"'
(通过JavaScript): "\\"
JSON解析器还将未加引号的版本"\\"
视为无效的JSON(第二个引号用反斜杠转义,因此不会终止字符串)。
解决此问题的方法是转义转义序列,如\\\\u....
实际上,您可能只是不使用JSON解析器。 在正确的上下文中使用(通过将其包装在括号中可确保所有JSON是有效的JavaScript。
您没有在转义反斜杠和双引号,因为\\ u00xx被javascript解析器解释。
JSON.parse('"\\\u0022"')
JSON.parse('"\\\""')
和
JSON.parse('"\\\u005C"')
JSON.parse('"\\\\"')
按预期工作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.