警告将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等)。

+1

不要忘记编码换行符,制表符和任何其他特殊字符。 ['JavaScriptStringEncode'](http://msdn.microsoft.com/en-us/library/system.web.httputility.javascriptstringencode.aspx),[如Alex建议](http://*.com/a/ 9413664/55847),将为您处理。 – LukeH 2012-02-23 13:19:48

(.NET 4)即可;

System.Web.HttpUtility.JavaScriptStringEncode(@"aa\bb ""cc"" dd\tee", true); 
== 
"aa\\bb \"cc\" dd\\tee" 
+1

不错!我使用.Net 4的MVC3,所以这非常有用! – Machado 2012-02-23 16:33:44

+0

.net版本 2014-04-01 14:23:10

+0

如何解码? – 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

+0

那么,我们如何安全地将C#UTF-16转换为UCS-2,以便以正确的方式对字符串进行编码? – Machado 2012-02-24 11:54:17

而不是使用JavaScriptStringEncode()方法,您可以使用编码服务器端在使用字符串之前调用unescape() javascript函数。

+1

你为什么选择这样做? – Casey 2015-07-24 01:43:27

+0

我的字符串不是url,为什么使用UrlEncode。这似乎很愚蠢。但我相信它会起作用。 – Gqqnbig 2017-03-03 03:05:38