13

我们正在使用 Jsoup.clean(String, Whitelist) 来处理一些输入,并且似乎 Jsoup 在可接受的标签之前添加了一个无关的换行符。我看到一些人在互联网上发布了这个问题,但一直无法找到解决方案。

例如,假设我们有一个非常简单的字符串,其中包含一些粗体标签,如下所示:

String htmlToClean = "This is a line with <b>bold text</b> within it."                                                                                                                                                       
String returnString =  Jsoup.clean(htmlToClean, Whitelist.relaxed());
System.out.println(returnString);

调用 clean() 方法的结果是这样的:

This is a line with \n<b>bold text</b> within it. 

请注意,在开始的粗体标记之前附加了无关的“\n”。我似乎无法在附加的源中找到它(尽管我承认我是 Jsoup 的新手)。

有没有人遇到过这个问题,更好的是,已经找到了一些方法来避免这种额外的、不需要的字符以这种方式附加到字符串中?

4

2 回答 2

14

嗯...还没有看到任何选项。

如果您在其中解析 html,Document则有一些输出设置:

Document doc = Jsoup.parseBodyFragment(htmlToClean);
doc.outputSettings().prettyPrint(false);

System.out.println(doc.body().html());

关闭后,您将prettyPrint获得以下输出:This is a line with <b>bold text</b> within it.

也许您可以编写自己的clean()方法,因为实现的方法使用Document's(您可以禁用prettyPrint):

原始方法:

public static String clean(String bodyHtml, Whitelist whitelist) {
    return clean(bodyHtml, "", whitelist);
}

public static String clean(String bodyHtml, String baseUri, Whitelist whitelist) {
    Document dirty = parseBodyFragment(bodyHtml, baseUri);
    Cleaner cleaner = new Cleaner(whitelist);
    Document clean = cleaner.clean(dirty);
    return clean.body().html();
}
于 2012-09-19T21:49:15.733 回答
8

附录:

我刚刚下载了 Jsoup 1.7.1,在这个版本中可以使用clean()-method 和 custom OutputSettings

String html = "This is a line with <b>bold text</b> within it.";

OutputSettings settings = new OutputSettings();
settings.prettyPrint(false);

String clean = Jsoup.clean(html, "", Whitelist.relaxed(), settings);

或更短:

String clean = Jsoup.clean(html, "", Whitelist.relaxed(), new OutputSettings().prettyPrint(false));

(实际上它与评论中发布的解决方案相同)

于 2012-09-25T09:46:58.053 回答