真正免费、可批量、能精准控制属性级清洗的工具是ponytail(跨环境白名单)、html5-clear(规则驱动CLI)、Hutool HtmlUtil(Java生态即用方法);其中ponytail基于DOM树解析与白名单重构,支持精确声明标签及属性级允许/禁止策略,Node与浏览器共用同一套配置,避免正则误伤或漏过滤。

直接说结论:真正免费、可批量、能精准控制属性级清洗的工具,其实就三类——ponytail(跨环境白名单)、html5-clear(规则驱动CLI)、Hutool HtmlUtil(Java生态即用方法)。其他所谓“一键清除”的在线工具,要么靠正则硬删(漏过滤/误伤文本),要么只清标签不碰属性(比如cleanHtmlTag()根本不管style或onclick)。
ponytail:为什么它能安全删掉onerror却放过class
它不走正则,而是先解析成DOM树,再按白名单逐节点重构。这意味着你能精确声明:“允许div带class和id,但禁止所有on*事件属性,style只保留color和font-size”。
- 配置写法示例:
{ tags: { div: { attributes: ['class', 'id'] } }, attributes: { '*': { deny: ['on.*', 'style'], allow: { style: ['color', 'font-size'] } } } } - Node 和浏览器里用同一套配置,服务端清洗富文本 + 前端预览时校验,规则不用双写
- 容易踩的坑:白名单没配全时,默认删光所有属性——不是bug,是设计;别指望它自动保留你没明说的
data-*,得手动加进allow
html5-clear:适合CI流程里自动清理HTML文件的CLI工具
它基于HTMLHint扩展,本质是“linter + fixer”,重点在修复不符合HTML5规范的属性滥用,比如把<div align="center">转成<code>style="text-align:center",再按规则决定是否保留该style。
- 命令行直接跑:
npx html5-clear -f input.html -o output.html --ruleset basic,basic规则集会删font、center等过时属性,但留class和data- - 想删
style?得换strict规则集,或者自定义JSON规则文件,显式写"attr-no-style": true - 注意:它不处理内联JS(如
onclick),这类XSS风险属性得靠ponytail或DOMPurify补位
Hutool的removeHtmlAttr()和removeAllHtmlAttr()怎么选
这是Java项目里最省事的方案——不引新依赖,一行代码删指定属性。但必须清楚它的边界:
生成可在 deepbi 沙箱 iframe 内运行或作为独立文件运行的交互式 HTML 页面,使用 `window.deepbi` JS SDK 实现数据查询、空间管理、文件浏览及用户操作。当用户提出以下需求时启用该能力: - 创建 KPI 仪表盘、数据表格、文件浏览器、成员列表、管理页面; - 明确要求“转成 dhtml”、“转译成 HTML”、“把 XX 页面转成……”、“控制台页面”、“管理后台”、“DeepBI 页面迁移”; - 提及位于 `apps/console/src/featur
立即学习“前端免费学习笔记(深入)”;
-
HtmlUtil.removeHtmlAttr(html, "style"):只删style属性,标签和内容全留,适合清理内联样式但保留结构 -
HtmlUtil.removeAllHtmlAttr(html):删光所有属性,<a href="https://www.php.cn/link/93ac0c50dd620dc7b88e5fe05c70e15b" onclick="...">link</a>变成<a>link</a>,但<script></script>标签本身还在——它不管标签,只管属性 - 性能上无压力,但无法条件过滤:不能“删所有
on*,但留data-id”,这种得自己写正则配合replaceAll()
真正难的不是“删属性”,而是判断哪些该留、哪些该砍、砍到哪一层。比如data-* 要不要保留?aria-* 是否属于业务必需?这些没法靠工具自动猜,得在配置里写清楚——否则批量跑完发现关键无障碍属性没了,比不清洗还麻烦。


















