2009-08-03 22 views

cevap

36

StringEscapeUtils için dize

"<Hello>" 

değişen bunun için tam olarak tasarlanmış işlevi vardır:

genellikle "HTML kaçan" denir

http://commons.apache.org/proper/commons-lang/javadocs/api-3.1/org/apache/commons/lang3/StringEscapeUtils.html

+2

Bu bağlantı artık çalışmıyor. Sınıfı burada bulabilirsiniz http://commons.apache.org/proper/commons-lang/javadocs/api-3.1/org/apache/commons/lang3/StringEscapeUtils.html ve onu içeren proje burada http: // commons.apache.org/proper/commons-lang/ – Jakub

+0

@Jakub Teşekkürler. Yayını yeni URL ile güncellendi. – Amber

3

. Bunu yapmak için standart kütüphanelerdeki herhangi bir şeyden haberdar değilim (ancak XML çıkışını kullanarak bunu tahmin edebilirsiniz). Bununla birlikte, bunu yapabilecek çok sayıda üçüncü taraf kütüphanesi vardır. Org.apache.commons.lang adresinden gelen StringEscapeUtils, bunu yapabilen bir escapeHtml yöntemine sahiptir.

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

Unicode ek karakterleri, bir String'de 2 karakter olarak kodlanır ve bu doğru bir şekilde işlenmeyecektir. Unicode'u desteklemek için gerçekten de kodlarla değil, kodlarla ilgilenmeniz gerekir. – Jakub

+1

Hey, bunun eski bir q olduğunu biliyorum, ama merak ediyorum - neden String.replaceAll() yöntemi karakterleri tek tek yerine geçmek yerine işe yaramaz? –

İlgili konular