我在哪里可以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+0000
到U+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的位置,但这不在这个问题的范围之内。