2012-05-23 87 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 
相關問題