警告将C#字符串编码为Javascript字符串
我想写一个自定义Javascript MVC3 Helper类对我的项目,并且其中一种方法应该将C#字符串转义为Javascript字符串。警告将C#字符串编码为Javascript字符串
我知道C#字符串是UTF-16 encoded,而Javascript字符串also seem to be UTF-16。这里没问题。
我知道像反斜杠一些字符,单引号或双引号必须反斜杠转义JavaScript的这样:
\ becomes \\
' becomes \'
" becomes \"
是否有其他需要注意的写我的转换方法之前,我必须知道的?
编辑: 到目前为止的最佳答案,我在问题中增加了一些答案以帮助其他人。
Alex K. suggested using System.Web.HttpUtility.JavaScriptStringEncode
,我标记为我正确的答案,因为我使用.NET 4,但此功能不可用以前的.NET版本,所以我在这里加入了一些其他资源:
CR becomes \r // Javascript string cannot be broke into more than 1 line
LF becomes \n // Javascript string cannot be broke into more than 1 line
TAB becomes \t
Control characters must be Hex-Escaped
JP Richardson给出了一个有趣的链接,通知Javascript使用UCS-2,它是UTF-16的子集,但如何正确编码这是一个全新的问题。
关于下面评论的LukeH提醒了CR,LF和TAB字符,这让我想起了控制字符(BEEP,NULL,ACK等)。
(.NET 4)即可;
System.Web.HttpUtility.JavaScriptStringEncode(@"aa\bb ""cc"" dd\tee", true);
==
"aa\\bb \"cc\" dd\\tee"
不错!我使用.Net 4的MVC3,所以这非常有用! – Machado 2012-02-23 16:33:44
.net版本 2014-04-01 14:23:10
如何解码? – MonsterMMORPG 2014-12-16 23:49:48
只需使用Microsoft.JScript.GlobalObject.escape
在这里找到它:http://forums.asp.net/p/1308104/4468088.aspx/1?Re+C+equivalent+of+JavaScript+escape+
这是我的理解是,你必须要小心,因为JavaScript并不是UTF-16,相反,它是UCS-2我相信这是UTF-16的子集。这对你意味着什么,任何代表2字节(0xFFFF)以上代码点的字符都可能给你带来JavaScript问题。总而言之,在引擎盖下,引擎可以使用UTF-16,但它只暴露UCS-2的方法。
在这个问题上大文章:
HttpUtility.UrlEncode()
当需要读取编码字符串客户端,你必须: http://mathiasbynens.be/notes/javascript-encoding
那么,我们如何安全地将C#UTF-16转换为UCS-2,以便以正确的方式对字符串进行编码? – Machado 2012-02-24 11:54:17
不要忘记编码换行符,制表符和任何其他特殊字符。 ['JavaScriptStringEncode'](http://msdn.microsoft.com/en-us/library/system.web.httputility.javascriptstringencode.aspx),[如Alex建议](http://stackoverflow.com/a/ 9413664/55847),将为您处理。 – LukeH 2012-02-23 13:19:48