【问题标题】:Why does JSoup remove element IDs?为什么 JSoup 会删除元素 ID?
【发布时间】:2013-01-13 12:56:30
【问题描述】:

我正在使用 JSoup 来清理一些不受信任的 HTML。我发现如果我打电话

String html = "<div id='foo'><script type='text/javascript'>alert('hello');</script></div>";
String cleanedHtml = Jsoup.clean(html, Whitelist.relaxed());

此时cleanedHtml

<div><div>

所以&lt;script&gt; 标记已被正确删除,但神秘的是,&lt;div&gt;id 属性也被删除。有什么好的理由应该删除它还是一个错误?

【问题讨论】:

  • 尝试在div 中添加除script 元素之外的其他内容。
  • @BalusC (实际上,它不是 :( Javadocs 与代码不匹配——根据文档,&lt;div&gt; 标签应该被删除,它只声明“适当”的属性,这让读者不确定,IMO。创建拉取请求。)

标签: java html-parsing jsoup


【解决方案1】:

默认情况下id 属性被移除;将其添加为允许的属性:

Whitelist whitelist = Whitelist.relaxed().addAttributes("div", "id");
System.out.println(Jsoup.clean(html, whitelist));

=> <div id="foo"></div>

这是一个错误吗?不是 AFAIC;它在源代码中。不过,IMO 存在文档错误。

是否有“任何充分的理由”为什么应该删除它?不确定那个,但是像这样的属性不是结构性的:删除它不会改变 DOM。这就是白名单的特点——它们明确允许,并且必须根据您的确切需求进行策划。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多