¿Hay alguna forma de convertir una cadena en una cadena que se muestre correctamente en un documento web? Por ejemplo, el cambio de la cadena¿Cómo escapar caracteres especiales HTML en Java?
"<Hello>"
Para
"<Hello>"
¿Hay alguna forma de convertir una cadena en una cadena que se muestre correctamente en un documento web? Por ejemplo, el cambio de la cadena¿Cómo escapar caracteres especiales HTML en Java?
"<Hello>"
Para
"<Hello>"
StringEscapeUtils
tiene funciones diseñadas precisamente para esto:
que generalmente se llama "HTML escapar". No estoy al tanto de nada en las bibliotecas estándar para hacer esto (aunque puede aproximarlo mediante el escapado de XML). Sin embargo, hay muchas bibliotecas de terceros que pueden hacer esto. StringEscapeUtils de org.apache.commons.lang tiene un método escapeHtml
que puede hacer esto.
public static String stringToHTMLString(String string) {
StringBuffer sb = new StringBuffer(string.length());
// true if last char was blank
boolean lastWasBlankChar = false;
int len = string.length();
char c;
for (int i = 0; i < len; i++)
{
c = string.charAt(i);
if (c == ' ') {
// blank gets extra work,
// this solves the problem you get if you replace all
// blanks with , if you do that you loss
// word breaking
if (lastWasBlankChar) {
lastWasBlankChar = false;
sb.append(" ");
}
else {
lastWasBlankChar = true;
sb.append(' ');
}
}
else {
lastWasBlankChar = false;
//
// HTML Special Chars
if (c == '"')
sb.append(""");
else if (c == '&')
sb.append("&");
else if (c == '<')
sb.append("<");
else if (c == '>')
sb.append(">");
else if (c == '\n')
// Handle Newline
sb.append("<br/>");
else {
int ci = 0xffff & c;
if (ci < 160)
// nothing special only 7 Bit
sb.append(c);
else {
// Not 7 Bit use the unicode system
sb.append("&#");
sb.append(new Integer(ci).toString());
sb.append(';');
}
}
}
}
return sb.toString();
}
Los caracteres suplementarios Unicode se codifican como 2 caracteres en una Cadena y esto no se procesará correctamente. Para admitir unicode realmente necesitas lidiar con puntos de código, no con caracteres. – Jakub
Oye, sé que esto es un antiguo q pero me preguntaba: ¿por qué el método String.replaceAll() no funcionaría en lugar de pasar por los caracteres uno por uno? –
htmlentities es una clase Java de código abierto que contiene una colección de métodos estáticos (htmlentities, unhtmlentities, ...) para convertir caracteres especiales y extendidas en entitities HTML y viceversa.
http://www.tecnick.com/public/code/cp_dpage.php?aiocp_dp=htmlentities
Este enlace ya no funciona. La clase se puede encontrar aquí http://commons.apache.org/proper/commons-lang/javadocs/api-3.1/org/apache/commons/lang3/StringEscapeUtils.html y el proyecto que lo contiene está aquí http: // commons.apache.org/proper/commons-lang/ – Jakub
@Jakub Gracias. Actualizó la publicación con la URL más nueva. – Amber