HTML特殊字符替換問題 html escape相關

在處理網頁時經常會遇到這樣的問題,後臺得到的字符串數據包含網頁HTML中的特殊字符,例如在頁面上這樣一句話,“你好·世界”在後臺取到的是“你好·世界”。這是由於HTML對特殊字符進行了編碼。

今天在取得前臺form表單提交的數據時,就遇到了這樣的問題。頁面表單填的數據是正常的字符串“你好·世界”,傳到後臺以後卻把·這個字符進行了編碼,變成了·

之前在做爬蟲時處理這種問題通常是進行簡單的替換,類似這樣

String escaped = source.replace("<", "&lt;").replace("&", "&amp;");

但是考慮到用戶進行表單提交可能有很多種情況的特殊字符,一一列舉各種特殊字符的情況再進行replace非常繁瑣。而這種字符串問題也很常見,應該有成熟的工具包可以對其進行處理。

google之後,果然沒讓我失望,這個工具就在apache的commons.lang包之中,是StringEscapeUtils工具類。

處理上述問題,只需要在後臺java代碼中進行如下處理即可。

String escaped = StringEscapeUtilssource.unescapeHtml(source);

escaped中的值就是正常的字符串“你好·世界”。


StringEscapeUtils中還提供了許多其他的方法,比如escapeCsv/unescapeCsv,escapeJava/unescapeJava,escapeJavaScript/unescapeJavaScript等等,類似escapeHtml/unescapeHtml,方便對字符串其他情況的處理。escapeHtml指的是將字符串進行編碼,unescapeHtml表示不編碼也就是顯示原始字符串。


真的要感謝造輪子的前人,使我們更方便地解決問題。我們也應該更充分得用好輪子,提高效率。有機會也去造輪子。也希望有一天隨着技術不斷髮展,輪子已經完善到不需要用我們這種用輪子的人^_^


好吧,不瞎扯了,再說句相關的題外話,spring中也提供htmlEscape功能,可以用 <spring:htmlEscape>和<spring:escapeBody>標籤;也可以在spring form的input標籤中添加屬性htmlEscape="false",完整方式如下

<form:input path="title" htmlEscape="false"/>

更詳細的請查閱spring相關文檔。


參考鏈接:

http://stackoverflow.com/questions/1265282/recommended-method-for-escaping-html-in-java 


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章