Je semble avoir des problèmes. J'ai une chaîne de requête qui a des valeurs qui peuvent contenir des guillemets simples. Cela cassera la chaîne de requête. Donc j'essayais de faire un remplacement pour changer '
en \'
.
Voici un exemple de code:
"This is' it".replace("'", "\'");
La sortie pour cela est toujours:
"This is' it".
Il pense que je fais juste un personnage d'évasion 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
STILL produit le même résultat dans les deux cas précédents:
"This is' it"
Je ne peux apparemment que faire en sorte que cela crache une barre oblique avec:
"This is' it".replace("'", "\\\\'");
Ce qui résulte en:
"This is\\' it"
Aucune suggestion? Je veux juste remplacer un '
par \'
.
Il ne semble pas que cela devrait être si difficile.
Tout d’abord, si vous essayez de coder des apostophes pour des chaînes de requête, ils doivent être codés au format URLEncodé et non précédés d’une barre oblique inverse. Pour cela, utilisez URLEncoder.encode(String, String)
(BTW: le deuxième argument doit toujours être "UTF-8"
). Deuxièmement, si vous souhaitez remplacer toutes les occurrences d'apostophe par une apostrophe à barre oblique inversée, vous devez échapper à la barre oblique inversée de votre expression de chaîne par une barre oblique inversée au début. Comme ça:
"This is' it".replace("'", "\\'");
Je vois maintenant que vous essayez probablement de construire de manière dynamique une instruction SQL. Ne pas le faire de cette façon. Votre code sera sujet aux attaques par injection SQL. Utilisez plutôt un PreparedStatement
.
Utilisez "This is' it".replace("'", "\\'")
J'ai utilisé une astuce pour gérer le caractère spécial apostrophe. Lors du remplacement de 'pour \', vous devez placer quatre barres obliques inverses avant l'apostrophe.
str.replaceAll("'","\\\\'");
Si vous voulez l'utiliser en JavaScript, vous pouvez utiliser
str.replace("SP","\\SP");
Mais en Java
str.replaceAll("SP","\\SP");
fonctionnera parfaitement.
SP: caractère spécial
Sinon, vous pouvez utiliser EscapeUtil d'Apache. Cela résoudra votre problème.
Rappelez-vous que stringToEdit.replaceAll(String, String)
renvoie la chaîne de résultat. Il ne modifie pas stringToEdit car les chaînes sont immuables en Java. Pour obtenir un changement quelconque, vous devez utiliser
stringToEdit = stringToEdit.replaceAll("'", "\\'");
Exemple :
String teste = " 'Bauru '";
teste = teste.replaceAll(" ' ","");
JOptionPane.showMessageDialog(null,teste);
J'ai utilisé
str.replace("'", "");
pour remplacer la citation simple dans ma chaîne. Cela fonctionne bien pour moi.