web-dev-qa-db-fra.com

Java remplace les problèmes par '(apostrophe/simple citation) et\(barre oblique inverse) ensemble

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.

24
derekmw

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("'", "\\'");

Modifier:

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.

33
Asaph

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

4
Marcelo

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("'","\\\\'");
3
Sanjay Saini

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.

1
santosh Singh

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("'", "\\'");
0
Gooby

Exemple :

String teste = " 'Bauru '";

teste = teste.replaceAll("  '  ","");
JOptionPane.showMessageDialog(null,teste);
0

J'ai utilisé 

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

pour remplacer la citation simple dans ma chaîne. Cela fonctionne bien pour moi.

0