注意事项将C#字符串编码为Javascript字符串

我正在尝试为我的项目编写一个自定义的Javascript MVC3 Helper类,其中一个方法应该将C#字符串转义为Javascript字符串。

我知道C#字符串是UTF-16编码的 ,Javascript字符串似乎也是UTF-16 。 这里没问题。

我知道一些字符,如反斜杠,单引号或双引号必须在Javascript上反斜杠转义,所以:

\ becomes \\ ' becomes \' " becomes \" 

在编写转换方法之前,我是否还有其他需要注意的警告?

编辑:到目前为止很棒的答案,我在问题的答案中添加一些参考资料,以帮助其他人。

Alex K.建议使用System.Web.HttpUtility.JavaScriptStringEncode ,我将其标记为正确的答案,因为我使用的是.Net 4.但是这个function以前的.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" 

我的理解是你必须要小心,因为JavaScript不是UTF-16,而是UCS-2,我相信它是UTF-16的一个子集。 这对您来说意味着,任何表示的字符都比2字节(0xFFFF)的更高代码点更能代码在JavaScript中出现问题。

总之,在封面下,引擎可能使用UTF-16,但它只暴露类似UCS-2的方法。

关于这个问题的精彩文章: http : //mathiasbynens.be/notes/javascript-encoding

只需使用Microsoft.JScript.GlobalObject.escape

在这里找到它: http : //forums.asp.net/p/1308104/4468088.aspx/1?Re+C+equivalent+of+JavaScript+escape+

您可以使用以下命令对服务器端进行编码,而不是使用JavaScriptStringEncode()方法

 HttpUtility.UrlEncode() 

当您需要读取编码的字符串客户端时,您必须在使用字符串之前调用unescape() javascript函数。