Java заменяет проблемы на '(апостроф / одинарная кавычка) и \ (обратная косая черта) вместе - PullRequest
24 голосов
/ 07 июня 2011

Кажется, у меня проблемы. У меня есть строка запроса, значения которой могут содержать одинарные кавычки. Это сломает строку запроса. Поэтому я пытался сделать замену, чтобы изменить ' на \'.

Вот пример кода:

"This is' it".replace("'", "\'");

Выход для этого все еще:

"This is' it".

Мне кажется, что я просто делаю escape-символ для цитаты.

Итак, я попробовал эти две части кода:

"This is' it".replace("'", "\\'");  // \\ for the backslash, and a ' char
"This is' it".replace("'", "\\\'"); // \\ for the backslash, and \' for the ' char

Оба из вышеперечисленных STILL приводят к одинаковому результату:

"This is' it"

Похоже, я могу получить только косую черту:

"This is' it".replace("'", "\\\\'");

Что приводит к:

"This is\\' it"

Есть предложения? Я просто хочу заменить ' на \'.

Не похоже, что это должно быть так сложно.

Ответы [ 7 ]

33 голосов
/ 07 июня 2011

Прежде всего, если вы пытаетесь кодировать апостолы для строк запросов, они должны быть закодированы в URLE, а не экранироваться с помощью обратной косой черты. Для этого используйте URLEncoder.encode(String, String) (Кстати: второй аргумент всегда должен быть "UTF-8"). Во-вторых, если вы хотите заменить все вхождения апостофа на апостроф с обратной косой чертой, вы должны избежать обратной косой черты в строковом выражении с ведущей обратной косой чертой. Как это:

"This is' it".replace("'", "\\'");

Edit:

Теперь я вижу, что вы, вероятно, пытаетесь динамически построить оператор SQL. Не делайте так. Ваш код будет подвержен атакам SQL-инъекций. Вместо этого используйте PreparedStatement.

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

Использование "This is' it".replace("'", "\\'")

3 голосов
/ 15 июня 2015

Я использовал трюк для обработки специального символа апостроф.При замене 'for \' перед апострофом необходимо поместить четыре обратных слеша.

str.replaceAll("'","\\\\'");
1 голос
/ 20 марта 2014

Если вы хотите использовать его в JavaScript, тогда вы можете использовать

str.replace("SP","\\SP");

Но в Java

str.replaceAll("SP","\\SP");

будет отлично работать.

SP: специальный символ

В противном случае вы можете использовать Apache EscapeUtil.Это решит вашу проблему.

0 голосов
/ 06 апреля 2017

Пример:

String teste = " 'Bauru '";

teste = teste.replaceAll("  '  ","");
JOptionPane.showMessageDialog(null,teste);
0 голосов
/ 26 июня 2015

Помните, что stringToEdit.replaceAll(String, String) возвращает строку результата. Он не изменяет stringToEdit, потому что строки являются неизменяемыми в Java. Чтобы получить любое изменение, вы должны использовать

stringToEdit = stringToEdit.replaceAll("'", "\\'");
0 голосов
/ 23 мая 2013

Я использовал

str.replace("'", "");

, чтобы заменить одинарную кавычку в моей строке.Это нормально работает для меня.

...