2012-12-06 5 views
5

Możliwe zduplikowane:
Java: How to decode HTML character entities in Java like HttpUtility.HtmlDecode?jak odkodować kody html za pomocą Java?

trzeba wyodrębnić akapity (jak title w StackOverflow) z pliku html.

Mogę używać wyrażeń regularnych w Javie do wyodrębniania pól, których potrzebuję, ale muszę uzyskać decode otrzymanych pól.

Przykład

dziedzinie ekstrakcji:

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

pole po zdekodowaniu:

Paging Lucene's search results 

Czy istnieje klasa w Javie, który pozwoli mi przekonwertować te kody html? Metody

+0

Czy Twój zawierają znaczniki HTML? –

+0

Tak, ale wyodrębnione pole nie zawiera znaczników – user

+5

Na początek, [używając regex do parsowania HTML] (http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self- Zawarte tagi) jest całkowicie błędna na pierwszym miejscu. Po prostu użyj [parsera HTML] (http://stackoverflow.com/questions/3152138/what-are-the-pros-and-cons-of-the-leading-java-html-parsers) takiego jak Jsoup. Trochę przyzwoity od razu by już dla Ciebie unescape HTML. – BalusC

Odpowiedz

24

Stosować dostarczone przez Apache Commons Lang

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

Twój link jest uszkodzony – Grux

+0

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

3

Do nie próbuj rozwiązać wszystkiego za pomocą wyrażeń regularnych.

Chociaż można zrobić kilka części - takich jak podmioty zastępujących The znacznie lepsze podejście jest właściwie używać (wytrzymałe) HTML parser.

Zobacz to pytanie: RegEx match open tags except XHTML self-contained tags , dlaczego nie jest to dobry pomysł na użycie szwajcarskiej piły łańcuchowej regexp. Poważnie, przeczytaj to pytanie i najwyższą odpowiedź, jest to ekspozycja przepełnienia stosu!

Chuck Norris może parse HTML z regex.

Złą wiadomością jest to: istnieje więcej niż jeden sposób do kodowania znaków.

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

Na przykład znak „X” może być reprezentowana jako λ, λ lub λ

A jeśli jesteś naprawdę pecha, niektóre strona internetowa opiera się na niektórych przeglądarkach zdolności do zgadnij znaczenie znaków. ™ na przykład nie jest prawidłowy, ale wiele przeglądarek interpretuje go jako .

Oczywiście dobrze jest zostawić to w dedykowanej bibliotece zamiast próbować samodzielnie zhakować niestandardowe wyrażenie regularne.

Więc gorąco polecam:

  • RSS ciąg do solidnego HTML parser
  • Get analizowana (iw pełni dekodowany) ciąg powrotem
+1

Potrzebuję wyodrębnić z htmls z tych samych struktur i tagów (jak wikipedia). Myślę więc, że regex to dobre podejście. – user

+2

@MrCarAsus: NIE, TO NIE JEST. Użyj parsera HTML, a DOM do ekstrakcji. Po to są! –

+0

Spróbuj użyć DBPedia, btw. Jest to już sparsowana wersja Wikipedii. –