2009-08-04 91 views
7

我正在建立一個字符串在服務器上被放入一個JavaScript變量在客戶端上。編碼撇號

什麼是最好的編碼是爲了避免任何問題

現在在服務器上我正在做這樣的事情的:

html = html.Replace("'", "'"); 

但我相信有更優雅的傻瓜證明的方式做這樣的事情。

回答

10

你真的更好使用Microsoft Anti-Cross Site Scripting Library來做到這一點。他們提供了一個JavaScriptEncode方法你想要做什麼:

Microsoft.Security.Application.AntiXss.JavaScriptEncode("My 'Quotes' and ""more"".", False) 
+0

不要忘了取消轉義它的前端例如,如果您想用它作爲警報框。 – 2011-05-30 19:24:14

1

我不知道在你使用這個字符串,它的上下文,但\'可能是你在找什麼。反斜槓是一個轉義字符,允許您使用certain characters,否則這些字符串不會出現在字符串文字中。這是輸出的JavaScript應該是什麼樣子:

alert('It\'s amazing'); 

當然,你可以在這種特殊情況下使用alert("It's amazing");

無論如何,如果你正在構建的JavaScript代碼:

html = html.Replace("'", "\\'"); 

在另一方面,也有除了需要一些處理引號其他字符。使用Microsoft Anti-Cross Site Scripting Library將一次獲得所有人。

0

您需要在字符串值中轉義的字符是反斜槓和用作字符串分隔符的字符。

如果單引號(')被用作字符串分隔符:

html = html.Replace(@"\", @"\\").Replace("'", @"\'"); 

如果引號(「)作爲字符串分隔符:

html = html.Replace(@"\", @"\\").Replace(@"""", @"\"""); 

如果你不知道哪個是分隔符使用時,或者如果它將來可能會改變,你可以逃脫既:

html = html.Replace(@"\", @"\\").Replace("'", @"\'").Replace(@"""", @"\"""); 
1
html = html.Replace("'", "%27"); 
1

我發現AntiXSS庫不能完成我正在尋找的,這是編碼服務器端和解碼在JavaScript中。

相反,我用Microsoft.JScript.dll它允許您:

GlobalObject.escape(string); 

和JavaScript中的客戶端:

unescape(string);