将单引号转换为字符串中的转义单引号
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字符串