使用 Puppeteer + Chrome 将 HTML 渲染为中文 PDF,自动处理图表等待、Tab 展开、动画、测高、白边消除、防分页,适用于看板、报表、网页和交互图表转 PDF。
java中通过正则表达式]*>替换移除html标签,简单高效但不安全,无法处理嵌套、注释、cdata及恶意属性,仅适用于日志清洗等低风险场景;高安全需求必须使用jsoup等专业解析器。

Java 中通过字符串替换实现 HTML 标签过滤,本质是用正则表达式匹配尖括号包裹的内容(即 `<...>`),再替换成空字符串。这种方式简单直接,适合对安全性要求不高的场景(如日志清洗、前端展示前的简易净化),但不能替代专业的 HTML 解析器(如 Jsoup),因为它无法处理嵌套、注释、CDATA、属性中的 JS 事件等复杂或恶意构造的情况。
基础正则替换:移除所有标签
最常用的是用 replaceAll() 配合正则 "]*>":
-
]*>表示:从开始,匹配任意非 <code>>字符(包括空格、斜杠、字母数字等),直到遇到第一个>结束 - 它能覆盖
<p></p>、<div class="a">、<code>、<br>等常见形式 - 示例代码:
String clean = html.replaceAll("]*>", ""); - 写法:
html.replaceAll("(?s)]*>", "")((?s)启用 DOTALL 模式,使.匹配换行符) - 但该正则仍无法过滤 HTML 注释
<!-- ... -->,因其内部含>。若需清理注释,得额外加一条:
clean = clean.replaceAll("", ""); - 第一步:把所有
和 <code>>转义为 HTML 实体(防执行):
html = html.replace("", ">"); - 第二步:只还原你信任的内联标签(用
replace而非正则,避免误匹配):
html = html.replace("<b>", "")
.replace("</b>", "")
.replace("<i>", "")
.replace("</i>", ""); -
<img src="x" onerror="alert(1)">—— 属性中含 JS,正则删了标签但没清属性逻辑 -
<svg><script>alert()</script></svg>—— 嵌套结构易漏匹配 -
<style>p{background:url('javascript:alert()')}</style>—— CSS 中的 JS - 若业务涉及用户输入展示(如评论、富文本编辑),必须用 Jsoup 等库做解析+白名单过滤
注意边界情况:换行与注释
默认正则 "]*>" 不跨行,遇到换行会中断匹配。如果原始 HTML 含换行标签(如多行写的 <script></script>),需加 Pattern.DOTALL 标志:
更稳妥的轻量级方案:分步 + 白名单思路
若想保留部分无害标签(如 <b></b>、<i></i>),可先转义全部,再恢复白名单标签:
重要提醒:别用于安全敏感场景
仅靠字符串替换无法防御如下攻击:










