如何使用Java解码html代码?

时间:2012-12-06 18:39:58

标签: java html regex decode

  

可能重复:
  Java: How to decode HTML character entities in Java like HttpUtility.HtmlDecode?

我需要从title文件中提取段落(如StackOverflow中的html)。

我可以在Java中使用正则表达式来提取我需要的字段,但我必须decode获得的字段。

示例

字段提取:

Paging Lucene&#39s search results (with **;** among **&#39** and **s**)
解码后的

字段:

Paging Lucene's search results

java中是否有允许我转换这些html代码的类?

3 个答案:

答案 0 :(得分:25)

使用Apache Commons Lang

提供的方法
import org.apache.commons.lang.StringEscapeUtils;
// ...
String afterDecoding = StringEscapeUtils.unescapeHtml(beforeDecoding);

答案 1 :(得分:3)

不要尝试通过regexp解决所有问题

虽然您可以执行某些操作 - 例如替换实体,但更好的方法实际上是使用(强大的) HTML解析器

请参阅此问题:RegEx match open tags except XHTML self-contained tags 为什么用正则表达式瑞士军队电锯这是一个坏主意。 说真的,请阅读此问题和最佳答案,这是堆栈溢出突出显示

  

Chuck Norris 可以使用正则表达式解析HTML。

坏消息是:编码字符的方法不止一种

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

  

例如,字符'λ'可以表示为λλλ

如果你真的不走运,一些网站依赖一些浏览器功能来猜测字符含义。例如,™无效,但许多浏览器会将其解释为

显然,最好将其留给专用库,而不是自己尝试破解自定义正则表达式。

所以我强烈建议:

  • 将字符串输入强大的HTML解析器
  • 解析(并完全解码)字符串

答案 2 :(得分:1)

Neko HTML对HTML做了很多有用的转换,"HTML Text Parser: Converting HTML to Text in Java using NekoHTML"解释了如何专门用它来提取文本内容。