Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 在哪里可以找到JSON ajax返回类型所需的转义字符列表?_Asp.net Mvc_Json_Escaping - Fatal编程技术网

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

Asp.net mvc 在哪里可以找到JSON ajax返回类型所需的转义字符列表?,asp.net-mvc,json,escaping,Asp.net Mvc,Json,Escaping,我有一个ASP.NET MVC操作,它返回一个JSON对象 JSON: {status: "1", message:"", output:"<div class="c1"><div class="c2">User generated text, so can be anything</div></div>"} {状态:“1”,消息:,输出:“用户生成的文本,所以可以是任何内容”} 目前我的HTML正在破坏它。在输出字段中将有用户生成的文本,因此

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

JSON:

{status: "1", message:"", output:"<div class="c1"><div class="c2">User generated text, so can be anything</div></div>"}
{状态:“1”,消息:,输出:“用户生成的文本,所以可以是任何内容”}
目前我的HTML正在破坏它。在输出字段中将有用户生成的文本,因此我必须确保转义所有需要转义的内容

有没有人列出我需要逃避的所有事情


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

马上,我可以看出HTML标记中的双引号至少会有问题。要使它成为有效的JSON,这些可能就是您需要转义的全部内容;替换

"


至于输出用户输入文本,您确实需要确保通过HttpUtility.HtmlEncode()运行它,以避免并确保它不会破坏页面的格式设置。

以下是创建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 \b退格(ASCII码08) \f表单馈送(ASCII代码0C) \新线 \回车 \t形标签 \垂直标签 \'撇号还是单引号 \“双引号 \\反斜杠字符 参考:

其中一些是可选的。例如,无论是转义制表符还是保留在制表符文字中,字符串都应该完全有效。不过,您当然应该处理反斜杠和引号字符。

看看。它声明的转义字符列表与Chris建议的稍有不同

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

JSON引用声明:

any-Unicode-character- except-"-or-\\-or- control-character 任何Unicode字符- 除了-“-或-\\-或- 控制字符 然后列出标准转义码:

\" Standard JSON quote \\ Backslash (Escape char) \/ Forward slash \b Backspace (ascii code 08) \f Form feed (ascii code 0C) \n Newline \r Carriage return \t Horizontal Tab \u four-hex-digits \“标准JSON引用 \\反斜杠(转义字符) \/正斜杠 \b退格(ascii码08) \f表单馈送(ascii代码0C) \新线 \回车 \t水平标签 \四个十六进制数字 由此,我假设我需要转义所有列出的字符,而所有其他字符都是可选的。如果愿意,您可以选择将所有字符编码为
\uxxx
,或者只能从以下位置执行任何不可打印的7位ASCII字符或Unicode值不在
\u0020中的字符:

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


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

,如官方ECMA规范第9节所述() 在JSON中,必须转义以下字符:

  • U+0022
    ,引号)
  • U+005C
    \
    ,反斜杠或反索利多卡因)
  • U+0000
    U+001F
    (ASCII控制字符)
此外,为了在HTML中安全嵌入JSON,还必须转义以下字符:

  • U+002F
    /
  • U+0027
  • U+003C
  • 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)
需要转义的其他字符将使用
\uxxx
表示法,即
\u
后跟编码代码点的四个十六进制数字


也可以使用
\uxxx
来代替短转义序列,或者可以选择从基本多语言平面(BMP)转义任何其他字符.

转义
/
也是一个好主意。至少当它是
的一部分时是这样。这些是我可以转义的,其中哪些是我必须转义的?当它在引号内时,你必须转义选项卡,jsonlint.com这样说,jquery.parseJSON这样说。这个列表是错误的。转义&apos;会产生无效的JSON-1。这个答案是错误的!您使用的参考文档记录了JavaScript的转义码(而OP询问的是JSON转义码)。您可以在上找到JSON转义码的正式列表。虽然两个转义码列表都有交叉点,但它们并不完全相同。例如,
\'
不是有效的JSON转义码,在使用时会导致验证错误,并且解析器与\之间有一个whinge,需要使用\\转义,但完全不清楚哪个字符rs应该用\uxxxx序列编码…并且有点不清楚其他大多数序列的意思…(由于我不认识
\f
),所以必须向上滚动到@ChrisNielsen的答案)
\uxxxx
转义码在基本多语言平面(U+0000到U+FFFF)中指定一个代码点。有关详细信息,请参阅官方规范。为什么不转义花括号?如果这是一个json文件,并且任何键/值都包含花括号,那么它不会使json结构无效吗?@Mugen:不,int、bool或float不能包含{或}。而且字符串总是位于双引号之间,因此不会出现混淆 \" Standard JSON quote \\ Backslash (Escape char) \/ Forward slash \b Backspace (ascii code 08) \f Form feed (ascii code 0C) \n Newline \r Carriage return \t Horizontal Tab \u four-hex-digits