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