2010-06-07 79 views
6
((string)dt.Rows[i][1]).Replace("'", "\\'") 

我想要的結果是,如果有任何字符串有報價,它會將其更改爲斜槓報價,例如, John's - >John\'sstring.Replace不適用於報價

但上述替換功能工作不正常。 它導致像John\\'s

,但如果我們的代碼更改爲

((string)dt.Rows[i][1]).Replace("'", "\'") 

它給像John's

的結果無論如何不會改變它。

+3

聽起來就像您想要清理SQL字符串一樣。如果這是真的,那麼請意識到有比手動更換報價* *很多更好的方法。例如編寫報表。 – BalusC 2010-06-07 14:03:21

+1

@John Rash - 我不確定你的編輯在這裏有幫助,據我可以告訴你通過將「\'」更改爲「\\'」來修正Azhar的代碼,所以你的編輯類型回答了問題:-) – 2010-06-10 21:16:52

+1

@Steve - 我沒有添加任何東西我只修改了格式,請看[原始源代碼](http://stackoverflow.com/revisions/ceed45a3-95dc-4126-8d1d-3b004307214b/view-source) – 2010-06-10 21:41:56

回答

16

由於反斜槓是轉義字符,你需要告訴它你要像對待一個字符串。

((string)dt.Rows[i][1]).Replace("'", @"\'") 
+1

當有許多事情要逃避時,@方法會更快,如果您複製並粘貼到其他.NET語言中,您將很樂意只需更改@而不是所有的\\ – 2010-06-07 14:51:21

9

嘗試使用雙反斜槓。

\\

只是一個反斜槓是一個轉義;兩個是實際的反斜槓。

4

使用"\\'"@"\'"作爲替換字符串。反斜槓是C#字符串文字中的轉義字符。請參閱C#中string literals的解釋:\'在字符串中導致只有單引號。 此轉義序列存在的原因是,如果您使用文字('\''),則單引號需要轉義。

@表示您正在使用逐字符串語法,該語法允許使用多行字符串,並且不需要轉義字符,除了使用雙引號(Visual Basic樣式)轉義的雙引號。

1

替換(「「」,「\」」)使用雙斜線

0

你可以使用這樣的事情:

private static string replace(String input) 
{ 
    return Regex.Replace(input, "('|\")", "\\'"); 
} 

static void Main(string[] args) 
{ 
    String value1 = "John Steve's"; 
    String value2 = "John Steve\"s"; 

    Console.WriteLine(replace(value1)); 
    Console.WriteLine(replace(value2)); 
} 

結果:您可以通過前置一個@字符串做

約翰史蒂夫\的

約翰史蒂夫的

3

請你澄清一下嗎?你是說

((string)dt.Rows[i][1]).Replace("'", "\\'") 

替換\'一個'

因爲我只是試了一下,它工作正常。即這

  string one = "blah'"; 
      string two = one.Replace("'", "\\'"); 

      Console.WriteLine(two); 

打印blah\'

0

如果你要準備一個SQL查詢,我認爲最好的方法就是更換一個'的‘’。舉例來說,如果你wanto搜索約翰·奧康納,這會工作(至少在SQL Server,訪問,甲骨文,...)。

select ... from users where username ='Jonh O''Connor'

+0

如果要準備像這樣的SQL查詢,不要。 – Thorarin 2010-06-07 17:27:02