Je récupère des données d'une base de données, où le champ contient une chaîne avec des données HTML. Je veux remplacer tous les guillemets doubles de sorte qu'il puisse être utilisé pour parseJSON
de jQuery .
En utilisant Java, j'essaie de remplacer les guillemets en utilisant ..
details.replaceAll("\"","\\\"");
//details.replaceAll("\"",""e;"); details.replaceAll("\"",""");
La chaîne résultante ne montre pas le changement souhaité. Un O'Reilly article prescrit d'utiliser des utils de chaîne Apache. Y-a t'il une autre possibilité??
Y a-t-il un regex ou quelque chose que je pourrais utiliser?
Voici comment
String details = "Hello \"world\"!";
details = details.replace("\"","\\\"");
System.out.println(details); // Hello \"world\"!
Notez que les chaînes sont immuable , il n'est donc pas suffisant de simplement faire details.replace("\"","\\\"")
. Vous devez réaffecter la variable details
à la chaîne résultante.
En utilisant
details = details.replaceAll("\"",""e;");
au lieu de cela, entraîne
Hello "e;world"e;!
Cela ne devrait-il pas être:
.replaceAll("\"","\\\\\"")
CINQ barres obliques inverses dans la chaîne de remplacement.
Je pense qu'une expression régulière est un peu exagérée dans cette situation. Si vous voulez juste supprimer toutes les citations de votre chaîne, j'utiliserais ce code:
details = details.replace("\"", "");
Pour que cela fonctionne en JSON, vous devez vous échapper d'un peu plus de caractères.
myString.replace("\\", "\\\\")
.replace("\"", "\\\"")
.replace("\r", "\\r")
.replace("\n", "\\n")
et si vous voulez pouvoir utiliser json2.js
pour l'analyser, vous devez également vous échapper
.replace("\u2028", "\\u2028")
.replace("\u2029", "\\u2029")
jSON autorise les chaînes entre guillemets, mais pas JavaScript.
Je sais que la réponse est déjà acceptée ici, mais je voulais simplement partager ce que j'ai trouvé lorsque j'ai essayé d'échapper aux guillemets doubles et simples.
Voici ce que j'ai fait: et ça marche :)
échapper à guillemets doubles:
if(string.contains("\"")) {
string = string.replaceAll("\"", "\\\\\"");
}
et échapper à guillemets simples:
if(string.contains("\'")) {
string = string.replaceAll("\'", "\\\\'");
}
PS: Veuillez noter le nombre de barres obliques inverses utilisées ci-dessus.
Cela consiste à supprimer les guillemets doubles dans une chaîne.
str1 = str.replace(/"/g, "");
alert(str1);
La regex suivante fonctionnera pour les deux:
text = text.replaceAll("('|\")", "\\\\$1");