2012-12-06 84 views
5

可能重複:
Java: How to decode HTML character entities in Java like HttpUtility.HtmlDecode?如何使用Java解碼html代碼?

我需要提取從html文件的段落(如在StackOverflow上title)。

我可以在Java中使用正則表達式來提取我需要的字段,但我必須獲得decode字段。

字段中提取:解碼後

Paging Lucene&#39s search results (with **;** among **&#39** and **s**) 

領域:

Paging Lucene's search results 

是否有任何的java類,讓我對這些HTML代碼的轉換?

+0

您是否包含HTML標記? –

+0

是的,但提取的字段不包含標籤 – user

+5

對於初學者,[使用正則表達式來解析HTML](http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-包含標籤)是完全錯誤的第一位。只需像Jsoup一樣使用[HTML解析器](http://stackoverflow.com/questions/3152138/what-are-the-pros-and-cons-of-the-leading-java-html-parsers)。一個體面的人會馬上爲你隱藏HTML。 – BalusC

回答

24

使用方法,通過Apache Commons Lang

import org.apache.commons.lang.StringEscapeUtils; 
// ... 
String afterDecoding = StringEscapeUtils.unescapeHtml(beforeDecoding); 
+0

您的鏈接已損壞 – Grux

+0

https://commons.apache.org/proper/commons-lang/javadocs/api-2.6/org/apache/commons/lang/StringEscapeUtils.html#unescapeHtml(java.lang.String) - Latest鏈接 – useranon

3

不嘗試通過正則表達式解決所有問題。

雖然你可以做一些部件 - 如更換實體的更好的方法是實際使用(穩健)HTML解析器

看到這個問題:RegEx match open tags except XHTML self-contained tags 爲什麼這是一個與正則表達式瑞士軍隊鏈鋸不好主意。 認真閱讀這個問題和頂部的答案,它是一個堆棧溢出高亮

查克·諾里斯可以解析HTML與正則表達式。

壞消息是:有不止一種方法來編碼字符。

https://en.wikipedia.org/wiki/Character_encodings_in_HTML

例如,字符「λ」可以表示爲λλλ

如果你是真的不走運,一些網站依賴於某些瀏覽器功能猜測字符的含義。例如™無效,但許多瀏覽器將其解釋爲

很明顯,將它留給專用庫是一個不錯的主意,而不是試圖自己破壞自定義正則表達式。

所以我強烈建議:

  • 飼料字符串轉換成一個強大的HTML解析器
  • 獲取解析(和完全解碼)字符串返回
+1

我需要從具有相同結構和標籤(如維基百科)的htmls中提取。所以我認爲正則表達式是一個好方法。 – user

+2

@MarCarAsus:不是。使用HTML解析器和DOM進行提取。這是他們的目的! –

+0

嘗試使用DBPedia,順便說一句。它是一個已經解析過的維基百科版本。 –