jsoup - 使用缺失和损坏的标签清理HTML

时间:2016-03-29 23:13:32

标签: java html jsoup

我正在寻找一种清除HTML文本的方法,这些文本中可能包含一些丢失或损坏的标记。这些通常由非程序员编写,HTML可能存在许多问题。这是我尝试过的:

Parser p = Parser.htmlParser();
String test = "Here is a <i>fake</> message.<br><b><i>- Publisher</b></i>";
Document d = p.parseInput(test, StringUtils.EMPTY);
System.out.println("BEFORE: " + test);
System.out.println("JSPARSED: " + StringUtils.remove(d.body().html(), "\n"));
System.out.println("JSOUP: "+ Jsoup.clean(test, StringUtils.EMPTY, Whitelist.relaxed()));

输出是:

BEFORE: Here is a <i>fake</> message.<br><b><i>- Publisher</b></i>
JSPARSED: Here is a <i>fake message.<br><b><i>- Publisher</i></b></i>
JSOUP: Here is a 
<i>fake message.<br><b><i>- Publisher</i></b></i>

所需的输出是:

Here is a <i>fake</i> message.<br><b><i>- Publisher</i></b>

是否可以使用jsoup清除上述情况的HTML?

编辑:要添加更多上下文,此HTML块会在我们的网站上显示为产品说明。这通常由营销团队或发布者编写,有时在HTML中有一些错误。我们目前使用JTidy进行HTML清理,然后在网站上显示它。

我最近运行了一个程序,看看有多少产品在说明中有错误,发现大约有30,000个产品有错误。在查看其中一些之后,我发现大多数错误都是错误顺序的标签(程序修复了),但是如示例所示,标签丢失或损坏的错误未按预期修复。

1 个答案:

答案 0 :(得分:0)

通过自动修正30k格式错误的HTML代码段,您不可能获得一致的结果。有可能,你会得到更多搞砸的内容。

帮自己一个忙:

  • 禁止以编程方式为新/已编辑的描述保存损坏的HTML。
  • 雇用某人手动更正这些内容(或委托给首先出错的营销团队)。