2011-11-28 107 views
1

我需要一個c#中的正則表達式,它將在字符串文字內部轉義雙引號。所以如果我有這個字符串:「怎麼樣」這個「以及如何」那個「」。我將能夠在沒有錯誤的情況下在JavaScript中使用它。因爲我正在寫這個文字作爲js var的頁面。在C#中的字符串文字內部轉義雙引號#

編輯:我會盡力解釋更多的問題。 我寫messege頁面這樣的:

string UserMsg = GetMessageText(999); 
StringBuilder script = new StringBuilder(); 
script.AppendFormat("var UserMsg =\"{0}\";{1}", UserMsg, Environment.NewLine); 
ScriptManager.RegisterClientScriptBlock(this, GetType(), "scriptparams", script.ToString(),true); 

現在可以說messege 999是這樣的:「我們找到了‘’你的詳細信息」的問題。 這是造成js錯誤。

+0

爲什麼你需要一個正則表達式使用C#的頁面.... IM confused.com寫javascript的變種! – ManseUK

+1

所以,你的問題真的是「我如何逃避JS中的引用字符」? –

回答

7

你不應該使用正則表達式來逃避C#字符串轉換爲JavaScript友好/安全格式。相反,假設您使用的是.NET 4,則可以使用HttpUtility.JavaScriptStringEncode,並且它會超負荷處理您的單引號和雙引號。

例如:

string UserMsg = GetMessageText(999); 
StringBuilder script = new StringBuilder(); 
script.AppendFormat("var UserMsg =\"{0}\";{1}", HttpUtility.JavaScriptStringEncode(UserMsg), Environment.NewLine); 
ScriptManager.RegisterClientScriptBlock(this, GetType(), "scriptparams", script.ToString(),true); 

會輸出中的與UserMsg設置爲以下: 「我們發現了一個 」「 您的詳細信息」 的問題:

var UserMsg ="we found a \"problem\" in your details"; 
+0

+1現在問題更清楚了,這絕對是正確的方法。 –

+0

「您不應該使用正則表達式將您的C#字符串轉換爲JavaScript友好/安全格式。」如果使用.net 3.5和JavaScriptStringEncode不受支持,該怎麼辦? –

4

假設我理解正確,爲了躲避在C#源代碼",可以做到這一點是這樣的:

"\"" 

那些文字的
@"""" 

要麼限定含有單一的字符串雙引號字符。


另一方面也許你需要知道如何在Javascript中轉義引號字符。這是通過\"完成的。你可以使用String.Replace()來實現這個效果,但是用適當的HTML/JS發射器庫會更好。

+4

是不是遺漏了逐字串的「@」。否則,你會使用'\「來避免引用,不是嗎? –

+0

@ Christian.K是的,抱歉,謝謝。 –

0

這裏是我的建議給你:

var regex = new Regex("\""); 
var result = regex.Replace(stringToReplace, "\\\""); 
1

Web Protection Library(也稱爲AntiXSS) 。這有一個JavascriptEncode方法來做到這一點和其他轉義。

0

我相信這樣的事情可能工作:

Regex.Replace(myString,'"',""); 
0

我認爲你的問題已經已經回答了,但如果你還需要完整的代碼。下面的一段javascript將會爲你工作的 。 var s =「這是\」Hi \「」; 提醒(S);

普利文

相關問題