string.Replace не работает для цитаты - PullRequest
6 голосов
/ 07 июня 2010
((string)dt.Rows[i][1]).Replace("'", "\\'")

Мне нужен результат, который, если любая строка имеет кавычку, заменяет ее на косую, например John's -> John\'s

, но функция замены выше не работает нормально. это выглядит как John\\'s

но если мы изменим код на

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

это дает Результат как John's

все равно меняет это.

Ответы [ 7 ]

16 голосов
/ 07 июня 2010

Поскольку обратная косая черта является escape-символом, вы должны сказать ей, что хотите рассматривать ее как буквенную строку. Вы делаете это, добавляя @ к строке:

((string)dt.Rows[i][1]).Replace("'", @"\'") 
9 голосов
/ 07 июня 2010

Попробуйте двойную обратную косую черту.

\\

Только один обратный слеш - это побег; два фактический обратный слеш.

4 голосов
/ 07 июня 2010

Используйте "\\'" или @"\'" для строки замены. Обратная косая черта - это escape-символ в строковых литералах C #. См. Объяснение строковых литералов в C #: \' в строковом литерале приводит к одной кавычке. Причина, по которой эта escape-последовательность существует, заключается в том, что одинарные кавычки требуют экранирования, если вы используете литерал char ('\'').

@ указывает на то, что вы используете дословный синтаксис строк, который позволяет использовать многострочные строки и устраняет необходимость в экранировании символов, кроме двойных кавычек, которые вы бы использовали в двойных двойных кавычках (стиль Visual Basic) .

3 голосов
/ 07 июня 2010

Не могли бы вы уточнить, пожалуйста? Вы говорите, что

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

не не заменяет ' на \'?

Потому что я только что попробовал, и он отлично работает. То есть это

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

            Console.WriteLine(two);

Отпечатки blah\'

1 голос
/ 07 июня 2010

Заменить ("'", "\'") использовать двойную косую черту

0 голосов
/ 07 июня 2010

Если вы хотите подготовить SQL-запрос, я думаю, что лучший способ - заменить один «для».Например, если вы хотите найти Джона О'Коннора, это будет работать (по крайней мере, в SQL Server, Access, Oracle, ...).

select ... из пользователей, где username = 'Jonh O'' Connor '

0 голосов
/ 07 июня 2010

Вы можете использовать что-то вроде этого:

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));
 }

Результаты:

Джон Стив

Джон Стив

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...