#2284·jsoup

清洗器和安全列表 API 重大更新

作者: jhy创建于 2025年3月12日更新于 2026年8月20日
标签improvementplanned

对于 Cleaner API,我的想法是允许配置好的 Cleaner 传递给 Parser。(其输入将是常规输入;字符串、文件、连接、输入流等。)这样,Parser(或 StreamParser)就可以在一次处理中进行标记化、树构建和清洁。我们还可以简化清洁 API,同时支持体部分片和完整文档的清洁。此外,我们还可以在一次处理中跟踪解析错误和安全列表错误,以告知 Cleaner 的 `isValid` 方法。通过直接通过 Parser 和 Document.OutputSettings 进行集成,我们可以同时支持 HTML 和 XML(以及保留标签和属性的配置)。还想添加一个 API,用于检索清洁器的错误列表 - 丢弃了哪些标签和属性,添加了哪些属性等。(作为一个未来的想法,可以允许清洁器使用自定义策略函数,该函数可以应用自定义逻辑来传递内容,并可以转义或丢弃不需要的元素等。)对于 Safelist,长期以来的请求是提供 HTML5 元素的预定义列表。现在 jsoup 已经具有良好的命名空间支持,HTML5 正在积极地使用它来处理 `math` 和 `svg` 空间,因此 Safelist 需要了解命名空间。API 应该使用 Tag 对象(带有命名空间和元素名称)。我计划重新设计 Tag,并添加一个 TagList,以允许定义自定义属性;这些属性可以正确地进行接口。在不需要时,保留一个简单的基于字符串的接口。我的计划是添加以 `5` 为后缀的新列表,例如 `Relaxed5` 等。现有列表将保持原样,以确保不会给任何人带来意外。新列表本着 HTML5 不断改进的精神,随着时间的推移,将开放给新的元素或删除。这也将是添加支持属性通配符的好机会,从而允许 Safelist 传递例如 `data-`、`aria-` 等。另一个功能将是配置如何处理被拒绝的元素,即删除元素但保留允许的子元素,就像今天一样,或者丢弃元素及其整个子树。这可以通过计划中的清洁策略来为每个元素选择。