我有一个ASP.NETMVC操作返回一个JSON对象。
JSON:
{status: "1", message:"", output:"<div class="c1"><div class="c2">User generated text, so can be anything</div></div>"}
字符串
目前我的HTML是打破它。将有用户生成的文本在输出字段,所以我必须确保我转义所有需要转义的东西。
有没有人列了一张我需要逃跑的东西的清单?
我没有使用任何JSON库,只是自己构建字符串。
6条答案
按热度按时间djmepvbi1#
看一下http://json.org/,它声明的转义字符列表与Chris提出的有点不同。
字符串
yh2wf1be2#
以下是在为JSON创建字符串字面量时可以转义的特殊字符列表:
字符串
引用:String literals
其中一些是可选的。例如,你的字符串应该是完全有效的,无论你是转义制表符还是保留制表符文字。你当然应该处理反斜杠和引号字符。
n8ghc7c13#
正如JSON中的ECMA官方规范(https://www.ecma-international.org/wp-content/uploads/ECMA-404_2nd_edition_december_2017.pdf)第9节所解释的那样,以下字符必须进行转义:
U+0022
("
,引号)U+005C
(\
,反斜线或反实线)U+0000
到U+001F
(ASCII控制字符)此外,为了在HTML中安全地嵌入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)中转义任何其他字符。xvw2m8pv4#
马上,我可以告诉你,至少HTML标签中的双引号是一个问题。
字符串
与
型
至于输出用户输入的文本,您确实需要确保通过HttpUtility.HtmlEncode()运行它,以避免XSS attacks,并确保它不会破坏页面的格式。
hrysbysz5#
关于spec:
所有字符都可以放在引号内,但必须转义的字符除外:引号(U+0022)、反实线[反斜杠](U+005C)和控制字符U+0000到U+001F
例如Bell(U+0007)没有单字符转义码并不意味着你不需要转义它。使用Unicode转义序列
\u0007
。ttisahbt6#
JSON引用声明:
字符串
然后列出标准转义码:
型
从这里我假设我需要转义所有列出的字符,而所有其他的都是可选的。如果您愿意,可以选择将所有字符编码为
\uXXXX
,或者你只能做任何不可打印的7-位ASCII字符或Unicode值不在\u0020 <= x <= \u007E
范围(32 - 126)
内的字符。最好先使用标准字符,以获得较短的转义码,从而提高可读性和性能.此外,您还可以从RFC 4627读取点2.5(字符串)。
您可能(也可能不)希望(进一步)转义其他字符,具体取决于JSON字符串的嵌入位置,但这超出了本问题的范围。