你从 Word、谷歌文档或网页里复制了一段文字,粘贴到编辑器里,结果满屏都是 <span style="...">、class="c3"、<o:p> 之类的标签。正文确实在里面,但被一堆 Markdown 渲染器根本用不到的装饰性标记淹没了。这篇文章讲的是怎么把这些脏 HTML 一步转成干净的 Markdown。
先说结论
把脏 HTML 粘贴到 HTML to Markdown 转换工具,点运行就行。span、内联 style 属性、class 名、<font> 标签、Word 特有的标记在 Markdown 里没有对应写法,会被自动去掉,只留下标题、列表、链接、表格这些结构。整个转换在浏览器里完成,所以即使你粘贴的是公司内部文档,数据也不会发出去。
和 HTML 清理工具的区别
去掉内联样式类的 HTML 清理工具返回的是干净的 HTML——装饰没了,但 <p>、<ul>、<div> 这些标签还在。如果你的目标是 GitHub Issue、README、语雀、飞书文档或 LLM 的 prompt,那你要的是 Markdown,还差一步。LLM 输入用 Markdown 还是 HTML,有实测对比(LLM 用 Markdown 还是 HTML)。
转换工具把这两步合在一起:去掉装饰噪音的同时,输出 #、-、[文本](url) 等 Markdown 语法。不用先清理 HTML 再转一遍。
粘贴的 HTML 为什么会这么脏
脏的程度取决于你从哪里复制。不同来源混入的噪音类型不一样。
Microsoft Word
Word 会用 Office 自己的标记把复制的文字包起来:style 属性里的 mso-* 属性、表示段落的 <o:p> 标签、条件注释(<!--[if gte mso 9]>)、<font face="..."> 标签等。这些对读者和 Markdown 渲染器都没有任何意义。
混入的标记也取决于复制路径。从 Word 桌面版直接复制、经过 Outlook、还是在浏览器里打开 Word 文件再复制,生成的标签种类和数量都有差异。
谷歌文档 (Google Docs)
谷歌文档生成的 HTML 更依赖内联 CSS 而不是语义化标签。加粗经常是 <span style="font-weight:700"> 而不是 <strong>,还会大量插入自动生成的 class 名和包裹每段文字的"幽灵 span"。class 名是随机生成的,没法用固定规则过滤。
网页复制
从网页上选中一块区域复制,会把该网站用来排版的东西全部带过来:外层 <div>、工具类 class 属性、内联 style,有时还有正文旁边的导航链接、分享按钮、广告位。转成 Markdown 后这些排版层会被丢掉,只保留可读的正文结构。
ChatGPT 与富文本编辑器
从 ChatGPT 的网页界面或 WYSIWYG 编辑器里复制带格式的回复时,经常会得到包含编辑器特有的 span 和 data-* 属性的 HTML。直接粘到别的工具里噪音会跟着走,但转成 Markdown 就只剩内容本身。
PDF 阅读器
从 PDF 阅读器里选中复制的文字,根本不是 HTML。没有 span、style、class,就是纯文本,所以"去除装饰噪音"这个步骤对它不适用。
PDF 把文字存成页面上的坐标集合,没有区分标题和正文的信息,段落中间可能插入换行,双栏排版的内容会左右混杂。尤其是表格,列容易错位。与其手动修粘贴出来的文本,不如直接把 PDF 文件丢进 PDF to Markdown 转换工具 来处理。表格错乱的原因和修复方法,见 PDF 转 Markdown 后表格错乱的原因与修复。
什么会被删除,什么会保留
常见的脏标记和转换后的 Markdown 结果对比如下:
| 原始标记 | 示例 | Markdown 结果 |
|---|---|---|
| 内联样式 | <span style="color:#333">text</span> | text(style 被去除) |
| class 名 | <p class="c3 c7">text</p> | text(class 被去除) |
| Word Office 标记 | <o:p></o:p>、mso-* style | 完全删除 |
| font 标签 | <font face="Calibri">text</font> | text |
| 外层容器 | <div><span>text</span></div> | text |
| 空 / 幽灵 span | <span></span> | 删除 |
| data 属性 | <p data-id="9">text</p> | text |
| 标题 | <h2>Title</h2> | ## Title |
| 加粗(语义 / style) | <strong>x</strong> 或 <span style="font-weight:700">x</span> | **x** |
| 链接 | <a href="/p" class="btn">go</a> | [go](/p) |
| 列表 | <ul><li>a</li></ul> | - a |
有两点需要注意:
- Markdown 是比 HTML 表达能力更弱的语言。有结构对应物的元素(标题、列表、链接、强调、表格、图片)会被保留,纯粹为了装饰的样式全部丢弃。
- "转成 Markdown"不等于"HTML 标签变成零"。Markdown 规范允许内联 HTML,所以转换工具对无法对应映射的标签(比如复杂的合并表格、不支持的元素)会保留原始 HTML 片段,而不是丢弃内容。结果足够干净,但不能保证所有场景下每个
<span>都消失。
用 FormatArc 转换
HTML to Markdown 转换工具把粘贴进来的 HTML 转成 Markdown。不用安装任何软件,也不上传文件。
- 打开 HTML to Markdown 转换工具。
- 把脏 HTML 粘贴到左侧输入框——Word 的垃圾、幽灵 span 都无所谓,原样贴就行。
- 点运行按钮,右侧立刻显示整理好的 Markdown。


HTML 解析和 Markdown 生成都跑在浏览器的 JavaScript 引擎里。所以即使你从 Word 粘贴了公司合同、或从 CMS 里复制了未发布的草稿,数据也不会外泄。
转换不干净时的应对
有些格式需要手动补一刀。
Word 表格与边框
从 Word 或电子表格粘贴的表格经常带有 colspan(合并列)、rowspan(合并行)或边框样式,这些在管道表格语法里没有对应写法。合并单元格会被扁平化,表格本身可能以行内 <table> 标签的形式残留。如果只关注表格,建议先简化单元格结构再转换。管道符、换行和列错位的自动处理,见 HTML 表格 转 Markdown 表格。
嵌套列表与换行
深层嵌套的列表、列表项里的 <br>、有序和无序混合嵌套,转换后可能出现多余的空行或缩进被拉平。检查一下输出,如果渲染器显示不对就手动调整缩进。
输出中残留的内联 HTML
如果结果里还有 <sub>、<details> 块或复杂表格等 HTML 片段,这是正常行为——转换工具为了保住内容而故意保留的。GitHub 和大多数静态站点生成器都支持 Markdown 里的内联 HTML,留着没问题;觉得碍眼就手动删掉。
网页复制混入的导航
如果复制了网页很大一块区域,菜单项和分享按钮的链接也混进来了,那就缩小复制范围,或者在转换后的 Markdown 里把多余的链接列表删掉。没有自动方法区分哪些链接是导航、哪些是正文。
常见问题
为什么 span 和 style 属性会被删除?
Markdown 没有表达内联 CSS、class 名、包裹 span 的语法。转换工具的设计目标是去掉编辑器特有的装饰噪音,只保留结构内容。这样你得到的是不绑定特定编辑器、任何渲染器都能读的高可移植性文本。
Word 的 mso- 标记也会去除吗?
会。mso-* 形式的 style 属性、<o:p> 段落标签、<font> 标签、条件注释在 Markdown 里没有对应物,全部删除。不管从 Word 哪条路径复制,这些标记都不会残留在 Markdown 结果里。
能保留 class 名或样式吗?
不能。Markdown 表达不了样式,所以是有意删除的。如果确实需要样式,保留一份原始 HTML,结构转成 Markdown 后,在渲染阶段用 CSS 重新套上去。
粘贴公司机密文档安全吗?
安全。转换完全在浏览器内的 JavaScript 中运行,你粘贴的 HTML 不会发送到 FormatArc 或任何第三方服务器。断网状态下一样能用。粘贴敏感数据前的 5 项验证方法,见 在线工具安全检测。
为什么转换后 Markdown 里还有 HTML 标签?
因为 Markdown 规范本身允许内联 HTML。遇到无法映射的结构(复杂表格、不支持的标签),转换工具会保留原始 HTML 片段而不是删掉你的内容。留着或手动删都行。
总结
Word、谷歌文档、ChatGPT、网页里来的脏 HTML,粘贴到 HTML to Markdown 转换工具一次就变成干净的 Markdown。span、内联 style、class、Office 标记全部去掉,结构保留。
如果你粘贴的内容总是被格式搞得一团糟,试试在浏览器里安全地转一下。转换不上传、不安装,打开就能用。