¿Cuál es la forma recomendada de escapar de los símbolos HTML en Java simple?

Resuelto Ben Lings asked hace 15 años • 0 respuestas

¿Existe alguna forma recomendada de escapar de los caracteres , y <al >generar HTML en código Java simple? (Aparte de hacer manualmente lo siguiente, claro está)."&

String source = "The less than sign (<) and ampersand (&) must be escaped before using them in HTML";
String escaped = source.replace("<", "&lt;").replace("&", "&amp;"); // ...
Ben Lings avatar Aug 12 '09 16:08 Ben Lings
Aceptado

StringEscapeUtils de Apache Commons Lang :

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);

Para la versión 3 :

import static org.apache.commons.lang3.StringEscapeUtils.escapeHtml4;
// ...
String escaped = escapeHtml4(source);
dfa avatar Aug 12 '2009 10:08 dfa

Una alternativa a Apache Commons: utilice el método SpringHtmlUtils.htmlEscape(String input) .

Adamski avatar Aug 12 '2009 10:08 Adamski

Buen método corto:

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 == '>' || c == '&') {
            out.append("&#");
            out.append((int) c);
            out.append(';');
        } else {
            out.append(c);
        }
    }
    return out.toString();
}

Basado en https://stackoverflow.com/a/8838023/1199155 (falta el amplificador allí). Los cuatro caracteres marcados en la cláusula if son los únicos por debajo de 128, según http://www.w3.org/TR/html4/sgml/entities.html

Bruno Eberhard avatar Aug 10 '2014 12:08 Bruno Eberhard

Existe una versión más nueva de la biblioteca Apache Commons Lang y utiliza un nombre de paquete diferente (org.apache.commons.lang3). Ahora StringEscapeUtilstiene diferentes métodos estáticos para escapar de diferentes tipos de documentos ( http://commons.apache.org/proper/commons-lang/javadocs/api-3.0/index.html ). Entonces, para escapar de la cadena HTML versión 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");
Martin Dimitrov avatar Jul 19 '2011 14:07 Martin Dimitrov

Para quienes usan Google Guava:

import com.google.common.html.HtmlEscapers;
[...]
String source = "The less than sign (<) and ampersand (&) must be escaped before using them in HTML";
String escaped = HtmlEscapers.htmlEscaper().escape(source);
okrasz avatar Oct 26 '2014 11:10 okrasz