273 votes

Méthode recommandée pour l'échappement du HTML en Java

Y a-t-il un moyen recommandé de s'échapper < , > , " et & lors de la sortie du HTML en code Java simple ? (À part faire manuellement ce qui suit, bien sûr).

String source = "The less than sign (<) and ampersand (&) must be escaped before using them in HTML";
String escaped = source.replace("<", "&lt;").replace("&", "&amp;"); // ...

271voto

dfa Points 54490

StringEscapeUtils de Langage Apache Commons :

import static org.apache.commons.lang.StringEscapeUtils.escapeHtml;
// ...
String source = "The less than sign (<) and ampersand (&) must be escaped before using them in HTML";
String escaped = escapeHtml(source);

Pour version 3 :

import static org.apache.commons.lang3.StringEscapeUtils.escapeHtml;
String escaped = escapeHtml(source);

148voto

Adamski Points 29884

Une alternative à Apache Commons : Utilisez Printemps 's HtmlUtils.htmlEscape(String input) méthode.

62voto

Bruno Eberhard Points 108

Belle méthode courte :

public static String escapeHTML(String s) {
    StringBuilder out = new StringBuilder(Math.max(16, s.length()));
    for (int i = 0; i < s.length(); i++) {
        char c = s.charAt(i);
        if (c > 127 || c == '"' || c == '<' || c == '>' || c == '&') {
            out.append("&#");
            out.append((int) c);
            out.append(';');
        } else {
            out.append(c);
        }
    }
    return out.toString();
}

Sur la base de http://stackoverflow.com/a/8838023/1199155 (l'ampli est absent à cet endroit). Les quatre caractères vérifiés dans la clause if sont les seuls à être inférieurs à 128, d'après http://www.w3.org/TR/html4/sgml/entities.html

47voto

Martin Dimitrov Points 1843

Il existe une version plus récente de la Bibliothèque Apache Commons Lang et il utilise un nom de paquet différent (org.apache.commons.lang3). Le site StringEscapeUtils possède maintenant différentes méthodes statiques pour l'échappement de différents types de documents ( http://commons.apache.org/proper/commons-lang/javadocs/api-3.0/index.html ). Donc pour échapper à la chaîne HTML version 4.0 :

import static org.apache.commons.lang3.StringEscapeUtils.escapeHtml4;

String output = escapeHtml4("The less than sign (<) and ampersand (&) must be escaped before using them in HTML");

40voto

OriolJ Points 677

Sur Android (API 16 ou supérieure), vous pouvez :

Html.escapeHtml(textToScape);

ou pour une API inférieure :

TextUtils.htmlEncode(textToScape);

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