Как избежать специальных символов HTML на Java?

Есть ли способ преобразовать строку в строку, которая будет отображаться правильно в веб-документе? Например, изменение строки

"<Hello>"

Для

"&lt;Hello&gt;"

Ответы

Ответ 2

Это обычно называется "HTML-экранирование". Я не знаю ничего в стандартных библиотеках для этого (хотя вы можете аппроксимировать его, используя экранирование XML). Однако есть много сторонних библиотек, которые могут это сделать. StringEscapeUtils от org.apache.commons.lang имеет способ escapeHtml, который может это сделать.

Ответ 3

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

Ответ 4

HTMLEntities - это открытый Java-класс, содержащий набор статических методов (htmlentities, unhtmlentities,...) для преобразования специальных и расширенных символов в HTML-разрешения и наоборот.

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

Ответ 5

Лучше сделайте это сами, если вы знаете логику позади - это легко:

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