64 votes

Remplacer tous les guillemets doubles dans une chaîne

Je récupère des données de la base de données où un champ contient une chaîne avec des données HTML. Je veux remplacer tous les guillemets doubles de façon à ce qu'ils puissent être utilisés pour des données HTML. parseJSON de jQuery .

En utilisant java, j'essaie de remplacer les guillemets par

details.replaceAll("\"","\\\"");
  //details.replaceAll("\"","&quote;"); details.replaceAll("\"","&#34");

J'ai essayé toutes ces méthodes mais la chaîne de caractères résultante ne montre pas le changement. L'article de O'reily prescrit Article apache string utils. Existe-t-il un autre moyen ?

Une regex ou autre ?

110voto

aioobe Points 158466

Voici comment

String details = "Hello \"world\"!";
details = details.replace("\"","\\\"");
System.out.println(details);               // Hello \"world\"!

Notez que les chaînes de caractères sont immuable Il n'est donc pas suffisant de faire simplement details.replace("\"","\\\"") . Vous devez réaffecter la variable details à la chaîne de caractères résultante.


Utilisation de

details = details.replaceAll("\"","&quote;");

au lieu de cela, il en résulte

Hello &quote;world&quote;!

38voto

mikhailgarber Points 176

Cela ne devrait-il pas être :

.replaceAll("\"","\\\\\"")

CINQ antislashs dans la chaîne de remplacement.

9voto

Je pense qu'une regex est un peu exagérée dans cette situation. Si vous voulez simplement supprimer tous les guillemets dans votre chaîne, j'utiliserais ce code :

details = details.replace("\"", "");

6voto

Mike Samuel Points 54712

Pour que cela fonctionne dans JSON, vous devez échapper quelques caractères de plus.

myString.replace("\\", "\\\\")
    .replace("\"", "\\\"")
    .replace("\r", "\\r")
    .replace("\n", "\\n")

et si vous voulez pouvoir utiliser json2.js pour l'analyser, vous devez également échapper à l'option

   .replace("\u2028", "\\u2028")
   .replace("\u2029", "\\u2029")

que JSON autorise à l'intérieur des chaînes citées, mais que JavaScript n'autorise pas.

3voto

Shrikant Points 3760

Je sais que la réponse est déjà acceptée ici, mais je voulais juste partager ce que j'ai trouvé lorsque j'ai essayé d'échapper aux guillemets doubles et simples.

Voici ce que j'ai fait : et cela fonctionne :)

pour s'échapper guillemets doubles :

    if(string.contains("\"")) {
        string = string.replaceAll("\"", "\\\\\"");
    }

et pour s'échapper guillemets simples :

    if(string.contains("\'")) {
        string = string.replaceAll("\'", "\\\\'");
    }

PS : Veuillez noter le nombre de barres obliques inversées utilisées ci-dessus.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X