HandyTools Hub

🔃 HTML 转 Markdown 转换器

粘贴 HTML,即刻获得干净的 Markdown

🔒 100% 浏览器本地处理

把内容从 HTML 转移到 Markdown 大体上是机械工作,但细节决定结果是干净利落还是满屏残留标签。这个转换器遍历解析后的 DOM,输出行内链接式 Markdown:保留可见内容、丢弃脚本和样式,对不认识的标签做解包处理,而不是让它们泄漏到输出里。转换在浏览器本地完成,粘贴的内容留在你的机器上。

使用方法

  1. 把 HTML 片段或完整文档粘贴到输入区,或加载示例查看映射关系。
  2. 阅读 Markdown 输出,它会在每次按键后更新,没有转换按钮。
  3. 把结果复制到剪贴板,或下载为 .md 文件。

转换器如何处理各种元素

HTMLMarkdown 输出
h1 到 h6用一到六个 # 的 ATX 标题
p带空行的段落
br单个换行
hr--- 分隔线
strong、b**粗体**
em、i*斜体*
code行内反引号
pre围栏代码块
a[文本](href),行内样式
img![alt](src)
ul、ol、li项目符号或编号,嵌套用两个空格缩进
blockquote> 引用行
table管道表格,第一行后带分隔线

div、section、article、header、footer 这类标签被当作通用块处理:渲染其子内容,并添加一个空行。未知的行内标签会被解包,让其中的文本保留下来。

实操示例

输入:

<h2>Release notes</h2>
<p>Version <strong>2.1</strong> adds a <a href="/docs">docs</a> link.</p>
<ul>
  <li>Faster build
    <ul><li>Incremental cache</li></ul>
  </li>
  <li>New CLI flag</li>
</ul>

输出:

## Release notes

Version **2.1** adds a [docs](/docs) link.

- Faster build
  - Incremental cache
- New CLI flag

嵌套列表正好获得两个空格的缩进,strong 标签变成双星号,链接变成行内的 [文本](href) 组合。

表格、列表与嵌套

表格由其 tr 和 td 行重建。单元格内容被压平成一行,字面的竖线字符转义为 \|,列数取最宽的一行,缺失的单元格用空值补齐。列表递归渲染:只有直接的 li 子元素会被编号或加项目符号,嵌套在列表项内部的列表会被推到新的一行,并使用更深的缩进。

什么时候输出会有损

转换器优先保证文本干净,而不是像素级保真,因此有几类内容会被有意丢弃或简化:

  • 脚本、样式、noscript、template 以及 head 内容会被完全移除。
  • HTML 注释绝不会出现在输出中。
  • colspan 和 rowspan 被忽略,合并单元格会变成各自独立的空单元格。
  • 嵌套表格可能被压平,因为所有后代行都会被收集进同一张表。
  • 复杂空白被折叠,pre 内的文本除首尾空行外会被保留。
  • iframe 和其他嵌入式组件不携带文本,因此其中的内容不会保留。
  • 不应用任何 Markdown 转义,所以源文本中包含 *、_、` 或 [ 时,重新渲染可能改变含义。

如果输出要送入严格的渲染器,请扫描一遍,检查原本在 HTML 里是字面量的文本周围是否出现了多余的星号或下划线。

常见的转换错误

多数抱怨都源于几个意外。源缩进中的空白会折叠成单个空格,因此仅靠标记间距对齐的内容会失去对齐。没有 href 的链接会被缩减为文本,通常无害,但没有 src 的图片会完全消失。br 标签会变成真正的换行,而它是否中断段落取决于周围的块级元素。因为转换器从不转义 Markdown 语法,像 5*4*3 这样的产品名在输出被渲染时会变成强调,用户名里一个多余的下划线可能把该行其余内容变成斜体。检查这四个方面,就能覆盖绝大多数粗糙边缘。

从 CMS 迁移内容

搬运文章最可靠的做法是从渲染后的 HTML 入手,而不是编辑器自带的导出。打开页面,查看源码或复制文章元素,把标记粘贴到这里。然后分四轮检查输出:标题是否与目标站点的结构一致;代码块是否已成围栏,并在需要语法高亮时补上语言;表格是否把预期的第一行提升为表头;行内链接是否指向你期望的 URL。把结果保存为 .md 文件,并补上静态站点需要的前置元数据。由于转换是即时的,一次处理一篇文章、逐篇目测完全可行,不必盲信批量运行。

为什么要把内容转成 Markdown

Markdown 比 HTML 更易读、更易做差异对比和评审。在 Git 仓库里,Markdown 段落改一个词只会显示为一行 diff,而同样的修改放在 HTML 里可能牵动属性和闭合标签。Markdown 也更便于携带:同一个文件可以渲染在静态站点生成器、笔记应用、README 和文档系统里。当你需要精确排版、嵌入式组件或样式时,HTML 仍然是更好的选择,这也正是「单向转换、源文件保留 HTML」成为一种常见工作流的原因。为存档或发布转换一次,并在仍然需要的地方保留更丰富的 HTML。

相关工具

常见问题

我需要粘贴带 html 和 body 标签的完整文档吗?

不需要。完整文档和片段都可以。转换器用浏览器自身的 DOM 解析器解析你粘贴的内容,它能容忍未闭合和格式错误的标签,然后读取生成的 body。

为什么我的表格在第一行后多了一条表头分隔线?

第一行总是被当作表头,即使它由 td 单元格而非 th 组成,也会在它之后插入一条 Markdown 分隔线。没有表头行的表格会把第一行数据提升为表头。

围栏代码块会带上语言标签吗?

不会。pre 元素会变成不带语言的围栏块,内部 code 标签上的语言 class 不会被带过来。你可以在转换后自己补上语言。

转换器会转义文本里的 Markdown 特殊字符吗?

不会。源文本里字面的星号、下划线、井号或方括号会原样输出,因此原本在 HTML 里是普通文本的内容,在输出被再次渲染时可能变成 Markdown 语法。

amp、nbsp 这类 HTML 实体是怎么处理的?

DOM 解析器会在转换前解码它们,所以 &amp; 变成普通的 &,&nbsp; 变成不换行空格字符。这个不换行空格不可见但确实存在,看起来可能像一处奇怪的间隙。

工具如何缩进嵌套列表?

每深入一层嵌套,就在列表标记前增加两个空格的缩进。有序列表在各自列表内从 1 开始编号,混合嵌套的列表则保留各自的标记样式。

由 HandyTools Hub 团队审校 · 最后更新