((string)dt.Rows[i][1]).Replace("'", "\\'")
我想要的結果是,如果有任何字符串有報價,它會將其更改爲斜槓報價,例如, John's
- >John\'s
string.Replace不適用於報價
但上述替換功能工作不正常。 它導致像John\\'s
,但如果我們的代碼更改爲
((string)dt.Rows[i][1]).Replace("'", "\'")
它給像John's
的結果無論如何不會改變它。
((string)dt.Rows[i][1]).Replace("'", "\\'")
我想要的結果是,如果有任何字符串有報價,它會將其更改爲斜槓報價,例如, John's
- >John\'s
string.Replace不適用於報價
但上述替換功能工作不正常。 它導致像John\\'s
,但如果我們的代碼更改爲
((string)dt.Rows[i][1]).Replace("'", "\'")
它給像John's
的結果無論如何不會改變它。
由於反斜槓是轉義字符,你需要告訴它你要像對待一個字符串。
((string)dt.Rows[i][1]).Replace("'", @"\'")
當有許多事情要逃避時,@方法會更快,如果您複製並粘貼到其他.NET語言中,您將很樂意只需更改@而不是所有的\\ – 2010-06-07 14:51:21
嘗試使用雙反斜槓。
\\
只是一個反斜槓是一個轉義;兩個是實際的反斜槓。
使用"\\'"
或@"\'"
作爲替換字符串。反斜槓是C#字符串文字中的轉義字符。請參閱C#中string literals的解釋:\'
在字符串中導致只有單引號。 此轉義序列存在的原因是,如果您使用文字('\''
),則單引號需要轉義。
@
表示您正在使用逐字符串語法,該語法允許使用多行字符串,並且不需要轉義字符,除了使用雙引號(Visual Basic樣式)轉義的雙引號。
替換(「「」,「\」」)使用雙斜線
你可以使用這樣的事情:
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));
}
結果:您可以通過前置一個@字符串做
約翰史蒂夫\的
約翰史蒂夫的
請你澄清一下嗎?你是說
((string)dt.Rows[i][1]).Replace("'", "\\'")
不不替換\'
一個'
?
因爲我只是試了一下,它工作正常。即這
string one = "blah'";
string two = one.Replace("'", "\\'");
Console.WriteLine(two);
打印blah\'
如果你要準備一個SQL查詢,我認爲最好的方法就是更換一個'的‘’。舉例來說,如果你wanto搜索約翰·奧康納,這會工作(至少在SQL Server,訪問,甲骨文,...)。
select ... from users where username ='Jonh O''Connor'
如果要準備像這樣的SQL查詢,不要。 – Thorarin 2010-06-07 17:27:02
聽起來就像您想要清理SQL字符串一樣。如果這是真的,那麼請意識到有比手動更換報價* *很多更好的方法。例如編寫報表。 – BalusC 2010-06-07 14:03:21
@John Rash - 我不確定你的編輯在這裏有幫助,據我可以告訴你通過將「\'」更改爲「\\'」來修正Azhar的代碼,所以你的編輯類型回答了問題:-) – 2010-06-10 21:16:52
@Steve - 我沒有添加任何東西我只修改了格式,請看[原始源代碼](http://stackoverflow.com/revisions/ceed45a3-95dc-4126-8d1d-3b004307214b/view-source) – 2010-06-10 21:41:56