((string)dt.Rows[i][1]).Replace("'", "\\'")
Я хочу результат, что, если какая-либо строка имеет кавычку, это изменяет его в кавычку наклонной черты, например. John's
-> John\'s
но вышеупомянутая функция замены не хорошо работает. это заканчивается как John\\'s
но если мы изменяем код на
((string)dt.Rows[i][1]).Replace("'", "\'")
это дает Результат как John's
действительно изменяет его так или иначе.
Поскольку обратная косая черта - это escape-символ, вам нужно указать ему, что вы хотите рассматривать его как буквальную строку. Вы делаете это, добавляя @ к строке:
((string)dt.Rows[i][1]).Replace("'", @"\'")
Попробуйте использовать двойную обратную косую черту.
\\
Всего одна обратная косая черта - это побег; два - это обратная косая черта.
Используйте "\\\'"
или @"\'"
для замены строки. Обратная косая черта является символом экранирования в строковых литералах C#. См. объяснение строковых литералов в C#: \'
в строковом литерале приводит к одной кавычке.
Причина, по которой существует эта последовательность, заключается в том, что одинарные кавычки потребовали бы экранирования, если бы вы использовали char
литерал ('\''
).
Символ @
указывает на то, что вы используете синтаксис дословной строки, который позволяет использовать многострочные строки и устраняет необходимость экранирования символов, кроме двойной кавычки, которую вы должны экранировать двойными двойными кавычками (стиль Visual Basic).
Не могли бы вы уточнить? Вы хотите сказать, что
((string)dt.Rows[i][1]).Replace("'", "\\'")
не заменяет '
на \'
?
Потому что я только что попробовал, и он отлично работает. Т.е. это
string one = "blah'";
string two = one.Replace("'", "\\'");
Console.WriteLine(two);
Выводит мля \ '
Вы можете использовать что-то вроде этого:
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));
}
Результаты:
Джона Стива
Джона Стива
Если вы хотите подготовить SQL-запрос, я думаю, что лучший способ - заменить одно слово «for». Например, если вы хотите выполнить поиск Джона О'Коннора, это сработает (по крайней мере, в SQL Server, Access, Oracle, ...).
выберите ... из пользователей, у которых username = 'Jonh O''Connor'