java - 为什么 JSoup 会删除元素 ID?

标签 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 也被删除了<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/

相关文章:

java - 如何在 IoC 容器外做简单的 Spring JDBC 事务?

java - JSF 中的 Ajax 表单更新显示 ViewExpiredException

java - 如何使用 JSoup 从 html 网页的表中提取特定行数据

python - 如何使用 Python 解析带有表格的 HTML 文件

java - 使用 Java 从 javascript 链接获取 html 更改

java - 如何使用java8流结合grouping by语句计算值的总和

javascript - 使用 Javascript 从 HTML 中提取文本

java - Android 使用 Jsoup 解析 HTML 时出现问题

java - 使用 jsoup 将 HTML 解析为格式化的纯文本

java - 如何在构造函数中使用@Value?