【问题标题】:Turning a single quote into an escaped single quote within a string将单引号转换为字符串中的转义单引号
【发布时间】:2012-05-30 12:17:58
【问题描述】:

问这个让我很痛苦,但是,由于某种原因,我无法让它工作(现在已经很晚了,是的,这是我的借口)。

假设我有这个字符串:

s = "John's book."

使用对象String中的replace方法,我想把它变成这样:

s = "John\'s book."

我本来希望这段代码能给我我想要的:

s = s.Replace("'", "\\'")

但是,结果是:

"John\\'s book."

【问题讨论】:

  • 您正在做的事情看起来应该可行。这是调试器的结果吗?我认为 VS 会通过显示 '\\' 而不是 '\' 来“帮助”。
  • @SirPentor - 确实如此。我做对了,但是调试器向我显示了一个不同的值。

标签: c# string replace escaping


【解决方案1】:

这样做,你就不必考虑它了:

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

【讨论】:

  • 我之前尝试过,但也没有用。结果是:John\\'s book.
  • 我认为您可能只是在调试器/检查器中查看它,这将显示它已转义(两次),但如果您这样做 Console.Write() 它应该正确输出。
  • 您可能正在调试并通过将鼠标悬停在 Visual Studio 中的 s 上查看结果...是的,这显示了转义;因为这是事实。但是如果你在某处(文本框或控制台)输出字符串,它会出现一个斜杠。
  • 我想我一直都做对了。虽然我不同意调试器显示的是“真相”,因为它不是真正的价值。
  • @manuelhe; s.Replace("'", @"\'");s.Replace("'", "\\'"); 都会给出相同的结果——不同之处在于调试器本身;它将字符串值显示为"John\\'s book.",并带有一个额外的斜线。但是如果你在控制台或文件中输出这个,你会看到真正的结果"John\'s book."
【解决方案2】:

如果这与 MVC.NET (MVC5+) 有关,只是为了展示另一种可能的解决方案:

var data= JSON.parse('@Html.Raw(HttpUtility.JavaScriptStringEncode(JsonConvert.SerializeObject(Model.memberObj)))');

这使您可以转义并将数据作为 JavaScript 传递给视图。 关键部分是:

HttpUtility.JavaScriptStringEncode

【讨论】:

    【解决方案3】:

    在使用 mysql 插入子句之前,我有一个快速而肮脏的函数来转义文本,这可能会有所帮助:

        public static string MySqlEscape(Object usString)
        {
            if (usString is DBNull)
            {
                return "";
            }
            else
            {
                string sample = Convert.ToString(usString);
                return Regex.Replace(sample, @"[\r\n\x00\x1a\\'""]", @"\$0");
            }
        }
    

    【讨论】:

    • 这对我不起作用。我正在使用 C#、Sqlite 等。我得到的是单引号前面的反斜杠,这不是 Sqlite 转义单引号的方式。
    • @sapbucket 如前所述,这是针对 mysql 的。您可以更改它以插入正确的 esc 序列。
    【解决方案4】:

    最简单的就是

    Server.HtmlEncode(varYourString);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-09-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-02
      相关资源
      最近更新 更多