web-dev-qa-db-fra.com

Échappement Java HTML

j'utilise actuellement org.Apache.commons.lang.StringEscapeUtils escapeHtml() pour échapper aux balises HTML non désirées dans mes chaînes, mais je me suis rendu compte qu'il échappait aussi aux caractères accentués à &something;,, ce que je ne veux pas.

Connaissez-vous une solution pour échapper aux balises HTML mais laissez mes lettres spéciales (bien, pour certaines personnes, elles sont normales ici;]) telles quelles?

Merci d'avance!

balázs

36
Balázs Németh
StringUtils.replaceEach(str, new String[]{"&", "\"", "<", ">"}, new String[]{"&amp;", "&quot;", "&lt;", "&gt;"})
30
pingw33n

Si c'est pour Android, utilisez plutôt TextUtils.htmlEncode(String).

21
goncalossilva

Cela me semble très bien:

org/Apache/commons/lang3/StringEscapeUtils.html # escapeXml (Java.lang.String)

En demandant XML, vous obtiendrez XHTML, qui est un bon HTML.

9
Nicolas Barbulesco

Voici une version qui remplace les six caractères significatifs comme recommandé par OWASP . Cela convient aux éléments de contenu HTML tels que <textarea>...</textarea>, mais pas aux attributs HTML tels que <input value="..."> car ces derniers ne sont souvent pas cités.

StringUtils.replaceEach(text,
        new String[]{"&", "<", ">", "\"", "'", "/"},
        new String[]{"&amp;", "&lt;", "&gt;", "&quot;", "&#x27;", "&#x2F;"});
5
quietmint

Je sais qu'il est trop tard pour ajouter mon commentaire, mais peut-être que le code suivant sera utile:

public static String escapeHtml(String string) {
    StringBuilder escapedTxt = new StringBuilder();
    for (int i = 0; i < string.length(); i++) {
        char tmp = string.charAt(i);
        switch (tmp) {
        case '<':
            escapedTxt.append("&lt;");
            break;
        case '>':
            escapedTxt.append("&gt;");
            break;
        case '&':
            escapedTxt.append("&amp;");
            break;
        case '"':
            escapedTxt.append("&quot;");
            break;
        case '\'':
            escapedTxt.append("&#x27;");
            break;
        case '/':
            escapedTxt.append("&#x2F;");
            break;
        default:
            escapedTxt.append(tmp);
        }
    }
    return escapedTxt.toString();
}

prendre plaisir!

1
Ahmad AlMughrabi

Si vous utilisez Wicket, utilisez:

import org.Apache.wicket.util.string.Strings;
...
CharSequence cs = Strings.escapeMarkup(src);
String str =      Strings.escapeMarkup(src).toString();
0
andraaspar