我在哪里可以找到我的JSON ajax返回类型所需的转义字符列表?

Bla*_*man 44 asp.net-mvc json escaping

我有一个返回JSON对象的ASP.NET MVC操作.

JSON:

{status: "1", message:"", output:"<div class="c1"><div class="c2">User generated text, so can be anything</div></div>"}
Run Code Online (Sandbox Code Playgroud)

目前我的HTML正在打破它.输出字段中将有用户生成的文本,因此我必须确保我转义所有需要转义的内容.

有人列出了我需要逃脱的所有事情吗?

我没有使用任何JSON库,只是自己构建字符串.

Pas*_*hec 75

看看http://json.org/.它声称有一些与Chris提议的转义字符列表不同.

\"
\\
\/
\b
\f
\n
\r
\t
\u four-hex-digits
Run Code Online (Sandbox Code Playgroud)

  • 除了完全不清楚哪些字符应该用\ uxxxx序列编码... (6认同)

Chr*_*sen 53

以下是在为JSON创建字符串文字时可以转义的特殊字符列表:

\b  Backspace (ASCII code 08)
\f  Form feed (ASCII code 0C)
\n  New line
\r  Carriage return
\t  Tab
\v  Vertical tab
\'  Apostrophe or single quote
\"  Double quote
\\  Backslash character

参考:字符串文字

其中一些比其他更可选.例如,无论您是否转义制表符还是留在标签文字中,您的字符串都应该完全有效.但是你当然应该处理反斜杠和引用字符.

  • 这些是我*可以逃脱的,其中哪些是我必须逃脱的? (4认同)
  • -1**这个答案是错误的!**您使用的引用文档是JavaScript的转义码(而OP询问JSON转义码).您可以在http://www.json.org/上找到JSON的正式转义码列表.虽然两个列表都有交叉点,但它们并不完全相同.例如,`\``不是有效的JSON转义码,并在使用[JSONLint](http://jsonlint.com)时导致验证错误 (4认同)
  • 逃避`/`也是一个好主意.至少当它是`</ script>`的一部分时. (3认同)

And*_*tan 10

正如JSON中官方ECMA规范(http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-404.pdf)第9节所述,必须转义以下字符:

  • U+0022(",引号)
  • U+005C(\,反斜杠或反向固相)
  • U+0000U+001F(ASCII控制字符)

此外,为了安全地在Windows中嵌入JSON,还必须转义以下字符:

  • U+002F(/)
  • U+0027(')
  • U+003C(<)
  • U+003E(>)
  • U+0026(&)
  • U+0085 (下一行)
  • U+2028 (线分隔符)
  • U+2029 (段落分隔符)

上述某些字符可以使用标准中定义的以下短转义序列进行转义:

  • \" 表示引号字符(U + 0022).
  • \\ 表示反向固相字符(U + 005C).
  • \/ 代表固相线字符(U + 002F).
  • \b 表示退格字符(U + 0008).
  • \f 表示换页字符(U + 000C).
  • \n 表示换行符(U + 000A).
  • \r 表示回车符(U + 000D).
  • \t 表示字符制表符(U + 0009).

需要转义的其他字符将使用\uXXXX符号,\u后面跟着编码代码点的四个十六进制数字.

\uXXXX,也可以使用代替短转义序列,或可选地逃脱从基本多语种平面(BMP)的任何其他字符.

  • 你能为此添加一个来源吗? (2认同)

Jar*_*ard 5

马上,我可以说至少HTML标签中的双引号会成为一个问题.那些可能是你需要逃脱的,因为它是有效的JSON; 只是替换

"
Run Code Online (Sandbox Code Playgroud)

\"
Run Code Online (Sandbox Code Playgroud)

至于输出用户输入文本,您需要确保通过HttpUtility.HtmlEncode()运行它以避免XSS攻击并确保它不会搞砸页面的格式.


Kev*_*yth 5

规格:

所有字符可放置除字符引号必须转义内:引号(U + 0022),固相线扭转[反斜杠(U + 005C),并且所述控制字符U + 0000至U + 001F

仅仅因为例如Bell(U + 0007)没有单字符转义码并不意味着你不需要逃避它.使用Unicode转义序列\u0007.