4

有人知道JSoup的替代品吗?

或者如何清理序列<p>&nbsp;</p>

用于 jQuery 的 HTML Clean 插件对我来说效果很好,但我有兴趣在服务器端进行 html 代码清理,而不是在客户端

或者,replaceAll 表达式是做什么的??:

String cleanS = dirtyS.replaceAll("<p>&nbsp;</p>", ""); //This doesnt work

我发现脏 html 带有混合的空格序列#160和其他类似的#32

所以,我需要一个表达式来删除它们的任何混合物。

混合空间空白

4

2 回答 2

8

您可以OutputSettings为此更改:

例子:

final String html = ...;


OutputSettings settings = new OutputSettings();
settings.escapeMode(Entities.EscapeMode.xhtml);

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

这也可以Document通过 Jsoup 解析:

Document doc = Jsoup.parse(...);
doc.outputSettings().escapeMode(Entities.EscapeMode.xhtml);

// ...

编辑:

删除标签:

doc.select("p:matchesOwn((?is) )").remove();

请注意:后面(?is)不是空格,而是char #160 (= nbsp)。这将删除所有自己的文本仅为&nbsp;. 如果您想对所有其他标签执行此操作,可以将 替换p:*:

于 2012-10-25T15:34:56.977 回答
1

如果您有文档对象,则可以遍历段落元素并删除所有其中没有文本(或非空白文本)的元素。在检查文本是否为空之前,您可以替换 NBSP 的出现;与空白。假设您使用 UTF-8 文档,以下可能对您有用:

public static final String NBSP_IN_UTF8 = "\u00a0"; 

假设您知道如何获取 Document 对象,清理循环很简单:选择段落元素并删除空元素:

org.jsoup.nodes.Document doc= ...   //obtain your document object  
for (org.jsoup.nodes.Element element : doc.select("p")) {
    if ( !element.hasText() || element.text().replaceAll(NBSP_IN_UTF8, "").trim().equals("") ) {
       element.remove();
    }
  }
于 2012-10-26T11:59:05.903 回答