2010年9月10日

Java / Groovy 的 HTML Encoding

開發網頁應用時,有些情況我們需要將資料庫讀取的文字,先經過編碼後再輸出,因為直接輸出原始文字,有些文字會被當作HTML的標籤或特殊字元處理。

例如程式碼中的 大於"<" 、 小於">" 等符號。

PHP程式可以用:
  • htmlspecialchars
  • htmlentities
在Java及Groovy程式我一直沒認真去找最佳答案,JSTL有escapeXml屬性,EL有 ${fn:escapeXml(problem)} 有些情況用string replace,有些情況用XML generator提供的function,總之,解決方法很多但就是不知道哪個比較好。

今天又遇到需要輸出大量程式碼的問題,再度認真google一下,發現Apache Commons Lang有提供StringEscapeUtils

下載 Apache Commons Lang

直接呼叫static method即可,用起來算是方便。
org.apache.commons.lang.StringEscapeUtils.escapeHtml(source_text)

這是目前我覺得滿意的解決方式,因為 Apache Commons 出品可以信賴,另外它也提供很豐富的功能(參考文末提供function list)。要說有什麼缺點,我想應該就是殺雞用牛刀的問題吧,為了一個小功能又要放進新的library,而且只用到其中一個class的一個method。不過在開發J2EE應用時,我已經不太在乎殺雞是不是用牛刀,目前手邊的專案規模還很小,但 WEB-INF/lib 資料夾就已有36個JAR檔,God bless my java。

CSV、HTML、Java、JavaScript、SQL、XML一包搞定。

static String     escapeCsv(String str)
static void     escapeCsv(Writer out, String str)
static String     escapeHtml(String str)
static void     escapeHtml(Writer writer, String string)
static String     escapeJava(String str)
static void     escapeJava(Writer out, String str)
static String     escapeJavaScript(String str)
static void     escapeJavaScript(Writer out, String str)
static String     escapeSql(String str)
static String     escapeXml(String str)
static void     escapeXml(Writer writer, String str)
static String     unescapeCsv(String str)
static void     unescapeCsv(Writer out, String str)
static String     unescapeHtml(String str)
static void     unescapeHtml(Writer writer, String string)
static String     unescapeJava(String str)
static void     unescapeJava(Writer out, String str)
static String     unescapeJavaScript(String str)
static void     unescapeJavaScript(Writer out, String str)
static String     unescapeXml(String str)
static void     unescapeXml(Writer writer, String str)

沒有留言:

張貼留言

lyhcode by lyhcode
歡迎轉載,請務必註明出處!