2011-11-28 257 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);

普利文