我在哪里可以find我的JSON ajax返回types所需的转义字符列表?

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

JSON:

{status: "1", message:"", output:"<div class="c1"><div class="c2">User generated text, so can be anything</div></div>"} 

目前我的HTML正在打破它。 在输出字段中将会有用户生成的文本,所以我必须确保我转义所有需要转义的东西。

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

我没有使用任何JSON库,只是build立自己的string。

看看http://json.org/ 。 它声称比Chris提出的有一些不同的字符。

 \" \\ \/ \b \f \n \r \t \u four-hex-digits 

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

 \ b退格(ASCII码08)
 \ f换页(ASCII码0C)
 \ n新行
 \ r回车
 \ t Tab
 \ v垂直标签
 \'撇号或单引号
 “双引号
 \\反斜杠字符

参考: string文字

其中一些比其他更可选。 例如,你的string应该是完全有效的,无论你转义制表符还是离开制表符。 不过,你当然应该处理反斜杠和引号字符。

正如JSON正式ECMA规范( publications/files/ECMA-ST/ECMA-404.html )第9节所解释的那样,以下字符必须被转义:

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

另外,为了安全地在HTML中embeddedJSON,以下字符也必须被转义:

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

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

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

其他需要转义的字符将使用\uXXXX符号,也就是\u后跟四个hex数字来编码代码点。

也可以使用\uXXXX来代替短的转义序列,或者可选地转义基本多语言平面(BMP)中的任何其他字符。

马上,我可以告诉,至lessHTML标签中的双引号将是一个问题。 这些都可能是你需要逃避它是有效的JSON; 只是取代

 " 

 \" 

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

从规格 :

除了必须转义的字符:引号(U + 0022),反斜线(反斜杠)(U + 005C)和控制字符U + 0000至U + 001F外,所有字符都可以放在引号内

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

JSON参考指出:

 任何-Unicode的character-
     除非 - “ - 或 -  \\  - 或 - 
     控制字符

然后列出标准的转义码:

   “标准的JSON报价
   \\反斜杠(Escape char)
   \ /正斜杠
   \ b退格键(ascii code 08)
   \ f换页(ASCII代码0C)
   \ n换行符
   \ r回车
   \ t水平制表符
   \四hex数字

从这个angular度来看,我认为我需要逃避所有列出的,其他的都是可选的。 如果您愿意,您可以select将所有字符编码到\uXXXX ,或者只能执行任何不可打印的7位ASCII字符或Unicode值不在\u0020 <= x <= \u007E范围(32 - 126) 。 最好先对较短的转义码进行标准字符的处理,从而提高可读性和性能。

另外,您可以阅读RFC 4627中的 2.5(Strings)。

你可能(或不可能)想要(进一步)逃避其他angular色,取决于你embeddedJSONstring的位置,但这不在这个问题的范围之内。