【问题标题】:escape double quotes inside string literal in C#在 C# 中的字符串文字内转义双引号
【发布时间】:2011-11-28 09:18:20
【问题描述】:

我需要一个 c# 中的正则表达式,它将在字符串文字中转义双引号。所以如果我有这个字符串:““this”怎么样,“that”怎么样”。我将能够在没有错误的情况下在 javascript 中使用它。因为我将这个文字作为 js var 写入页面。

编辑:我会尝试更多地解释这个问题。 我像这样在页面上写消息:

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); 

现在让我们说消息 999 是这样的:“我们在您的详细信息中发现了一个“问题””。 这会导致 js 错误。

【问题讨论】:

  • 为什么你需要一个正则表达式来使用 c# 将 javascript 写入一个 var 到一个页面......我很困惑.com !!!
  • 那么,您的问题真的是“如何在 JS 中转义引号字符”吗?

标签: c# javascript regex


【解决方案1】:

您不应使用正则表达式将 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); 

UserMsgset 输出为“我们在您的详细信息中发现了一个“问题””:

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

【讨论】:

  • +1 现在问题更清楚了,这绝对是正确的方法。
  • "您不应该使用正则表达式将您的 C# 字符串转义为 JavaScript 友好/安全的格式。"如果您使用的 .net 3.5 和 JavaScriptStringEncode 不受支持怎么办?
【解决方案2】:

假设我理解正确,要在 C# 源代码中转义 ",您可以这样做:

"\""

@""""

这些文字中的任何一个都定义了一个包含单个双引号字符的字符串。


另一方面,您可能需要知道如何在 Javascript 中转义引号字符。这是通过\" 完成的。您可以使用String.Replace() 来实现这一点,但使用适当的 HTML/JS 发射器库会更好。

【讨论】:

  • 你是不是错过了逐字字符串的“@”。否则你会使用\" 转义引用,不是吗?
【解决方案3】:

请参阅Web Protection Library(也称为 AntiXSS)。它有一个 JavascriptEncode 方法来执行此操作和其他转义。

【讨论】:

    【解决方案4】:

    这是我给你的建议:

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

    【讨论】:

      【解决方案5】:

      我相信这样的事情可能会奏效:

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

      【讨论】:

        【解决方案6】:

        我认为您的问题已经得到解答,但如果您仍然需要完整的代码。 下面的一段 javascript 对你有用。 var s = "这是\"嗨\" "; 警报;

        普雷文

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-01-06
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多