Java remplacer problèmes avec ' (apostrophe/single quote) et \ (barre oblique inverse) ensemble
Me semble avoir des problèmes. J'ai une chaîne de requête qui a des valeurs qui peuvent contenir des guillemets simples. Cela permettra de briser la chaîne de requête. J'essayais donc de faire remplacer pour modifier '
à \'
.
Voici un exemple de code:
"This is' it".replace("'", "\'");
La sortie de ce est toujours:
"This is' it".
Il pense que je suis juste en faisant un caractère d'échappement pour la citation.
J'ai donc essayé ces deux morceaux de code:
"This is' it".replace("'", "\\'"); //\\ for the backslash, and a ' char
"This is' it".replace("'", "\\\'"); //\\ for the backslash, and \' for the ' char
À la fois de ce qui précède TOUJOURS les résultats dans la même sortie:
"This is' it"
Je ne peux que semblent de ce fait cracher un slash avec:
"This is' it".replace("'", "\\\\'");
Qui se traduit par:
"This is\\' it"
Des suggestions? Je veux juste remplacer un '
avec \'
.
Il ne semble pas comme il doit être difficile.
- Avez-vous fait une faute de frappe? Je ne vois pas de différence entre les deux derniers extraits de code, et le second, les résultats semblent être ce que vous voulez.
- "J'ai une chaîne de requête" - tu veux dire une chaîne de requête SQL? Si oui, utiliser PreparedStatements et des requêtes paramétrées. Alors vous ne avez pas à traiter avec l'échappement de ces caractères sur votre propre.
- Je suis avec jwodder sur cette. Ce que vous voulez et ce que vous obtenez semblent être les mêmes.
Vous devez vous connecter pour publier un commentaire.
Tout d'abord, si vous encodez apostophes pour querystrings, ils ont besoin d'être URLEncoded, échappe pas précédé d'un backslash. Pour que l'utilisation
URLEncoder.encode(String, String)
(BTW: le deuxième argument doit toujours être"UTF-8"
). Deuxièmement, si vous voulez remplacer toutes les instances de apostophe avec barre oblique inverse apostrophe, vous devez vous échapper de la barre oblique inverse dans votre expression de chaîne avec un anti-slash. Comme ceci:Edit:
Je vois maintenant que vous êtes probablement en train de générer dynamiquement une instruction SQL. Ne pas faire de cette façon. Votre code sera sensible à des attaques par injection SQL. Au lieu d'utiliser un
PreparedStatement
.PreparedStatement
. Votre stratégie actuelle est sensible aux attaques par injection SQL."select column_Name from table_name where column_name = '" + rndQueryValue.replace("'", "\\'") + "'"
. Mais encore une fois, c'est horrible. L'Injection SQL. Oy...Utilisation
"This is' it".replace("'", "\\'")
'
lui-même n'est pas nécessaire ici. Seule la barre oblique inverse doit être échappé.J'ai utilisé une astuce pour gérer l'apostrophe caractère spécial. Quand remplacer"\", vous devez placer quatre barres obliques avant l'apostrophe.
Si vous voulez l'utiliser en JavaScript, alors vous pouvez utiliser
Mais en Java
fonctionnera parfaitement.
SP: caractère spécial
Sinon, vous pouvez utiliser Apache EscapeUtil. Il permettra de résoudre votre problème.
J'ai utilisé
pour remplacer l'apostrophe dans mon string. Sa fonctionne très bien pour moi.
'
de la chaîne?Rappelez-vous que
stringToEdit.replaceAll(String, String)
retourne la chaîne de résultat. Il ne modifie pas la stringToEdit parce que les Chaînes sont immuables en Java. Pour obtenir tout changement à coller, vous devez utiliserExemple :