【问题标题】:how to decode html codes using Java? [duplicate]如何使用 Java 解码 html 代码? [复制]
【发布时间】:2012-11-24 21:01:27
【问题描述】:

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

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

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

示例

提取的字段:

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

解码后的字段:

Paging Lucene's search results

java中是否有任何类可以让我转换这些html代码?

【问题讨论】:

  • 您的 HTML 是否包含标签?
  • 是,但提取的字段不包含标签
  • 对于初学者来说,using regex to parse HTML 首先是完全错误的。只需使用 HTML parser 之类的 Jsoup。有点体面的会立即为您取消转义 HTML。

标签: java html regex decode


【解决方案1】:

使用Apache Commons Lang提供的方法

import org.apache.commons.lang.StringEscapeUtils;
// ...
String afterDecoding = StringEscapeUtils.unescapeHtml(beforeDecoding);
【解决方案2】:

不要不要试图用正则表达式解决所有问题

虽然您可以做一些事情 - 例如替换实体,但更好的方法是实际使用(强大的)HTML解析器

看到这个问题:RegEx match open tags except XHTML self-contained tags 为什么使用 regexp swiss Army 电锯是个坏主意。 说真的,阅读这个问题和最佳答案,这是一个堆栈溢出亮点

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

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

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

例如,字符“λ”可以表示为λλλ

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

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

所以我强烈推荐:

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

【讨论】:

  • 我需要从具有相同结构和标签的 html 中提取(如维基百科)。所以我认为正则表达式是一个很好的方法。
  • @MrCarAsus:不,不是。使用 HTML 解析器和 DOM 进行提取。这就是他们的目的!
  • 尝试使用 DBPedia,顺便说一句。它是已经解析过的维基百科版本。
  • 你知道 StackOverflow 的解析版本吗?我尝试将正则表达式与 stackoverflow htmls 一起使用,它可以工作。我使用一组应用于 htlm 的正则表达式提取标题和答案。
  • @MikeSamuel 该页面在数字 3 中显示:“not ... 在 U+0080–U+009F 范围内”。 0x0099 在此范围内。
猜你喜欢
  • 2015-02-13
  • 1970-01-01
  • 2020-12-10
  • 2019-04-26
  • 1970-01-01
  • 2012-09-10
  • 1970-01-01
  • 1970-01-01
  • 2014-02-06
相关资源
最近更新 更多