为什么JSoup删除元素ID?

时间:2013-01-13 12:56:31

标签: java html-parsing jsoup

我正在使用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>

因此<script>标记已被正确删除,但神秘,id的{​​{1}}属性也是如此。有什么理由可以删除它或者它是一个错误吗?

1 个答案:

答案 0 :(得分:6)

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

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

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

这是一个错误吗?不是AFAIC;它在源头。 IMO虽然存在文档错误。

是否“有任何理由”为什么要删除它?不确定那个,但这样的属性不是结构性的:删除它不会改变DOM。这是关于白名单的问题 - 他们明确允许,并且必须根据您的确切需求进行策划。