C# 将字符串中的单引号转换为转义单引号

C# 将字符串中的单引号转换为转义单引号,c#,string,replace,escaping,C#,String,Replace,Escaping,问这个让我很痛苦,但是,由于某种原因,我一直无法让它工作(是的,这是我的借口) 假设我有这个字符串: s = "John's book." 使用对象字符串中的replace方法,我想将其转换为: s = "John\'s book." 我希望这段代码能满足我的需求: s = s.Replace("'", "\\'") 但是,这会导致: "John\\'s book." 这样做,您就不必考虑: s = s.Replace("'", @"\'"); 在mysql insert子句中使用之前

问这个让我很痛苦,但是,由于某种原因,我一直无法让它工作(是的,这是我的借口)

假设我有这个字符串:

s = "John's book."
使用对象字符串中的
replace
方法,我想将其转换为:

s = "John\'s book."
我希望这段代码能满足我的需求:

s = s.Replace("'", "\\'")
但是,这会导致:

"John\\'s book."

这样做,您就不必考虑:

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

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

    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");
        }
    }
最简单的是

Server.HtmlEncode(varYourString);

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

这允许您转义数据并将其作为JavaScript传递给视图。 关键部分是:

HttpUtility.JavaScriptStringEncode

我以前试过,但也没用。它的结果是:
John\\\\的书。
我想您可能只是在调试器/检查器中查看它,它将显示它已转义(两次),但如果您执行
Console.Write()
操作,它应能正确输出。您可能正在调试并通过在Visual Studio中将鼠标悬停在
s
上查看结果。。。是的,这显示了逃跑;因为这是事实。但是如果你把字符串输出到某个地方(一个文本框,或者在控制台中),它会以一个斜杠出现。我想我一直都是对的。虽然我不同意调试器显示的是“真相”,因为它不是真正的值。@manuelhe;两个
s.Replace(“'”,@“\”)
s.Replace(“'”,“\\”)
将给出相同的结果——不同之处在于调试器本身;它将字符串值显示为带有额外斜杠的“John\\'s book.”
。但是,如果您在控制台或文件中输出,您将看到真正的结果
“John's book.”
。您所做的看起来应该是可行的。这是调试器的结果吗?我认为VS将显示一个“\\”而不是“\\”。@SirPentor-确实如此。我是对的,但是调试器向我显示了一个不同的值。这对我不起作用。我使用的是C#、Sqlite等。我得到的是单引号前的反斜杠,而不是Sqlite如何转义单引号。@sapbucket如前所述,这是针对mysql的。您可以将其更改为插入正确的esc序列。
HttpUtility.JavaScriptStringEncode