2009-08-03 8 views

Répondre

36
+2

Ce lien ne fonctionne plus. La classe peut être trouvée ici http://commons.apache.org/proper/commons-lang/javadocs/api-3.1/org/apache/commons/lang3/StringEscapeUtils.html et le projet qui la contient est ici http: // commons.apache.org/proper/commons-lang/ – Jakub

+0

@Jakub Merci. Mise à jour du message avec l'URL la plus récente – Amber

3

Ce qu'on appelle habituellement "HTML échapper". Je ne suis pas au courant de quoi que ce soit dans les bibliothèques standard pour le faire (même si vous pouvez l'approximer en utilisant l'échappement XML). Cependant, il y a beaucoup de bibliothèques tierces qui peuvent le faire. StringEscapeUtils de org.apache.commons.lang a une méthode escapeHtml qui peut le faire.

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

Les caractères supplémentaires Unicode sont codés sous la forme 2 caractères dans une chaîne et cela ne sera pas rendu correctement. Pour soutenir vraiment unicode, vous devez gérer les points de code, pas les caractères. – Jakub

+1

Hey je sais que c'est un vieux q mais je me demandais - pourquoi la méthode String.replaceAll() ne fonctionnerait pas au lieu de passer par les caractères un par un? –

Questions connexes