2012-12-06 59 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,顺便说一句。它是一个已经解析过的维基百科版本。 –