你从 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 后这些排版层会被丢掉,只保留可读的正文结构。
同样是网页复制,混进来的东西会因为站点怎么搭而不同。WordPress 文章会在正文前后排上作者信息、分类和相关文章链接,主题加的 wp-block- 系列 class 也会落在正文段落上。文档站点会在每个标题旁边放锚点链接、每个代码块上放复制按钮,选中范围包含它们时就会当成文字留下来。新闻站点会在段落之间插入相关报道卡片和分享按钮,于是段落之间会出现既不是标题也不是正文的短行。这三种情况转换都能通过,变的是转换之后要删掉的东西。
ChatGPT 与富文本编辑器
从 ChatGPT 的网页界面或 WYSIWYG 编辑器里复制带格式的回复时,经常会得到包含编辑器特有的 span 和 data-* 属性的 HTML。直接粘到别的工具里噪音会跟着走,但转成 Markdown 就只剩内容本身。
常被问到的是 <div style="..."> 这类外层容器会不会留下来。按下面 什么会被删除,什么会保留 表里的说明,外层容器只留下里面的文字,内联 style 和 data-* 属性也会一并去掉。颜色、边框、间距都不会带过来,进入 Markdown 的只有标题、加粗、链接、列表这些结构。如果需要保留外观,就别转成 Markdown,直接按 HTML 处理。
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。
粘贴前后的核对示例
例如,输入 <h2>步骤</h2><p class="c3"><span style="color:red">检查设置</span></p><ul><li><a href="/help">帮助</a></li></ul> 时,期望输出是 ## 步骤、检查设置、- [帮助](/help)。确认标题、正文、链接目标和列表顺序都保留,而 class 和 style 消失。如果复制的范围连菜单一起带了进来,转换就分不清它和正文,转换后请重新检查选区。
注:此例已在现行工具上运行,并按输出一致的形式确定。


HTML 解析和 Markdown 生成都跑在浏览器的 JavaScript 引擎里。所以即使你从 Word 粘贴了公司合同、或从 CMS 里复制了未发布的草稿,数据也不会外泄。
转换不干净时的应对
有些格式需要手动补一刀。
Word 表格与边框
从 Word 或电子表格粘贴的表格经常带有 colspan(合并列)、rowspan(合并行)或边框样式,这些在管道表格语法里没有对应写法。合并单元格会被扁平化,表格本身可能以行内 <table> 标签的形式残留。如果只关注表格,建议先简化单元格结构再转换。管道符、换行和列错位的自动处理,见 HTML 表格 转 Markdown 表格。
嵌套列表与换行
深层嵌套的列表、列表项里的 <br>、有序和无序混合嵌套,转换后可能出现多余的空行或缩进被拉平。检查一下输出,如果渲染器显示不对就手动调整缩进。
输出中残留的内联 HTML
如果结果里还有 <sub>、<details> 块或复杂表格等 HTML 片段,这是正常行为——转换工具为了保住内容而故意保留的。GitHub 和大多数静态站点生成器都支持 Markdown 里的内联 HTML,留着没问题;觉得碍眼就手动删掉。
网页复制混入的导航
如果只复制了一篇文章,正文前后却混进了菜单项、分享按钮或相关文章链接,那就在复制时缩小选取范围,或者在转换后的 Markdown 里把多余的链接列表删掉。没有自动方法区分哪些链接是导航、哪些是正文。输出开头和结尾连着一串短链接的那几段一般就是,把第一个标题之前和最后一段之后整块删掉最快。
如果这个动作要在几十篇文章上重复,就有别于一页一页复制的另一条路。WordPress 文章迁移到 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 标记全部去掉,结构保留。
如果你粘贴的内容总是被格式搞得一团糟,试试在浏览器里安全地转一下。转换不上传、不安装,打开就能用。