我正在使用 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
也被删除了<div>
的属性.是否有任何充分的理由说明为什么应该删除它或者它是一个错误?
最佳答案
默认情况下,id
属性被移除;将其添加为允许的属性:
Whitelist whitelist = Whitelist.relaxed().addAttributes("div", "id");
System.out.println(Jsoup.clean(html, whitelist));
=> <div id="foo"></div>
这是一个错误吗?不是 AFAIC;它在源代码中。不过,IMO 存在文档错误。
是否有“任何充分的理由”为什么要删除它?不确定那个,但像这样的属性不是结构性的:删除它不会改变 DOM。这就是关于白名单的事情——它们明确允许,并且必须精心策划以满足您的确切需求。
关于java - 为什么 JSoup 会删除元素 ID?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14303691/