2009-08-03 38 views

Respuesta

36
+2

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

+0

@Jakub Gracias. Actualizó la publicación con la URL más nueva. – Amber

3

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.

2
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 &nbsp;, if you do that you loss 
      // word breaking 
      if (lastWasBlankChar) { 
       lastWasBlankChar = false; 
       sb.append("&nbsp;"); 
       } 
      else { 
       lastWasBlankChar = true; 
       sb.append(' '); 
       } 
      } 
     else { 
      lastWasBlankChar = false; 
      // 
      // HTML Special Chars 
      if (c == '"') 
       sb.append("&quot;"); 
      else if (c == '&') 
       sb.append("&amp;"); 
      else if (c == '<') 
       sb.append("&lt;"); 
      else if (c == '>') 
       sb.append("&gt;"); 
      else if (c == '\n') 
       // Handle Newline 
       sb.append("&lt;br/&gt;"); 
      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(); 
} 
+0

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

+1

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? –

Cuestiones relacionadas