注意事项将C#字符串编码为Javascript字符串
本文关键字:字符串 Javascript 编码 注意事项 | 更新日期: 2023-09-27 18:25:37
我正试图为我的项目编写一个自定义的Javascript MVC3 Helper类,其中一个方法应该是将C#字符串转义为Javascript字符串。
我知道C#字符串是UTF-16编码的,Javascript字符串似乎也是UTF-16。这里没问题。
我知道一些字符,如反斜杠,单引号或双引号必须在Javascript上进行反斜杠转义,所以:
' becomes ''
' becomes ''
" becomes '"
在编写转换方法之前,是否还有其他需要注意的事项?
编辑:到目前为止,答案很好,我在问题的答案中添加了一些参考资料,以帮助未来的其他人。
Alex K.建议使用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"
我的理解是,您必须小心,因为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++等价物+of+JavaScript+escape+
您可以使用对服务器端进行编码,而不是使用JavaScriptStringEncode()
方法
HttpUtility.UrlEncode()
当您需要在客户端读取编码字符串时,在使用字符串之前必须调用unescape()
javascript函数。