web-dev-qa-db-fra.com

Comment échapper aux caractères spéciaux HTML en Java?

Existe-t-il un moyen de convertir une chaîne en une chaîne qui s'affichera correctement dans un document Web? Par exemple, changer la chaîne

"<Hello>"

À

"&lt;Hello&gt;"
14
Nathaniel Flath
37
Amber

C'est ce qu'on appelle généralement "échappement HTML". Je ne suis au courant de rien dans les bibliothèques standard pour cela (bien que vous puissiez l'approcher en utilisant l'échappement XML). Cependant, de nombreuses bibliothèques tierces peuvent le faire. StringEscapeUtils from org.Apache.commons.lang a une méthode escapeHtml qui peut le faire.

3
Laurence Gonsalves
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();
}
2
Sorantis

HTMLEntities est une classe Java Open Source contenant une collection de méthodes statiques (htmlentities, unhtmlentities, ...) permettant de convertir des caractères spéciaux et étendus en entités HTML et inversement.

http://www.tecnick.com/public/code/cp_dpage.php?aiocp_dp=htmlentities

1
Borislav Gizdov

Mieux vaut le faire vous-même, si vous connaissez la logique derrière - c'est facile:

 public class ConvertToHTMLcode {
        public static void main(String[] args) throws IOException {
          String specialSymbols = "ễ%ß Straße";
          System.out.println(convertToHTMLCodes(specialSymbols)); //&#7877;%&#223;
   }

   public static String convertToHTMLCodes(String str) throws IOException {
      StringBuilder sb = new StringBuilder();
      int len = str.length();
      for(int i = 0; i < len; ++i) {
          char c = str.charAt(i);
         if (c > 127) {
            sb.append("&#");
            sb.append(Integer.toString(c, 10));
            sb.append(";");
        } else {
            sb.append(c);
        }
     }
       return sb.toString();
   }
}
0
Plcode