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

Posted

技术标签:

【中文标题】将单引号转换为字符串中的转义单引号【英文标题】: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 - 确实如此。我做对了,但是调试器向我显示了一个不同的值。 【参考方案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);

【讨论】:

以上是关于将单引号转换为字符串中的转义单引号的主要内容,如果未能解决你的问题,请参考以下文章

Python如何将单引号转换为双引号以格式化为json字符串

编辑 .plist 文件 - 是不是允许将单引号用作字符串?

shell中的单引号和双引号的区别

模糊查询中含有单引号

hsqldb单引号字符

shell基础知识总结