2012-05-23 219 views
28

问我这件事让我感到很痛苦,但由于某种原因,我一直无法得到它的工作(现在已经很晚了,是的,那是我的借口) 。将单引号转换为字符串中的单引号

比方说,我有这样的字符串:

s = "John's book." 

使用从对象的字符串的replace方法,我希望把它变成这样:

s = "John\'s book." 

我本来期望这个代码给我想要什么:

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

但是,结果是:

"John\\'s book." 
+0

你在做什么看起来应该工作。这是调试器的结果吗?我认为VS会通过显示'\\'而不是'\'来“帮助”。 – SirPentor

+0

@SirPentor - 的确如此。我说得对,但是,调试器让我看到了不同的价值。 –

回答

57

这样做,所以你不必去想它:

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

我以前曾尝试过这种方法,但也没有奏效。它的结果是:'约翰的书'。 –

+8

我想你可能只是在调试器/检查器中查看它将显示它逃脱(两次),但如果你做'Console.Write()'它应该输出正确。 – lukiffer

+1

您可能正在调试并在Visual Studio中将鼠标悬停在's'上来查看结果...是的,它显示了转义;因为这是事实。但是如果你在某个地方输出字符串(一个文本框或者在控制台中),它将会出现一个斜线。 – BeemerGuy

4

我有一个快速和肮脏的功能使用在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"); 
     } 
    } 
+0

这不适合我。我使用的是C#,Sqlite等。我得到的是单引号前的反斜杠,这不是Sqlite如何转义单引号。 – sapbucket

+0

@sapbucket如上所述,这是针对mysql的。你可以改变它来插入正确的esc序列。 – JohnP

2

最简单的一种是

Server.HtmlEncode(varYourString); 
+0

这一个不行,报价将变成' – zquanghoangz

0

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

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

这可以让你逃脱和数据传递到的意见,如JavaScript。 关键部分是:

HttpUtility.JavaScriptStringEncode 
相关问题