HTML 转 Markdown 转换器
在浏览器中将 HTML 转换为干净的 Markdown——支持 GFM 表格、任务列表和链接。可选 ATX/Setext 标题及内联或引用链接。非常适合迁移网页内容或喂给 LLM。100% 私密,无需上传。
自定义 CSS
什么是 HTML 转 Markdown?
HTML 转 Markdown 会取一份渲染后的 HTML 文档——浏览器所显示的标签、属性和嵌套——并把它改写成 Markdown,即那种为书写和版本控制而生的轻量纯文本格式。如果说 Markdown 转 HTML 是把紧凑文本展开成用于显示的标记,那么这就是相反且做减法的方向:你从丰富、冗长的 HTML 出发,把它提炼成 Markdown 所提供的那一小套可读约定。
在底层,转换器把你的 HTML 解析成一棵 DOM 树——与浏览器构建的节点结构相同——然后遍历那棵树,为它识别的每个节点输出 Markdown 等价物。<h2> 变成 ## ,<strong> 变成 **text**,<ul> 变成项目符号列表, 变成链接,<table> 变成 GFM 管道表格。遍历真实的 DOM,而不是对原始字符串跑正则表达式,正是它能正确处理嵌套列表、混合内联格式和表格、而不在边缘情况上出错的原因。
当你是在迁出 HTML、而非迁入它时,会用到这种转换。被困在 CMS、所见即所得编辑器、旧网页或富文本字段里的内容难以 diff、难以审阅、难以迁移。把它转换为 Markdown 能将其解放为一种在 Git 仓库、静态站点生成器或笔记应用中安然存在的格式——并且越来越成为大语言模型能高效阅读的格式。诚实的工具会直言其代价:转换是有损的——HTML 能表达 Markdown 无法表达的东西,所以一些结构和每一处样式细节都被有意丢弃,以换取干净、可移植的文本。
反向操作——Markdown 转回 HTML,供你准备好发布或预览时使用——同样有用。切换到 Markdown → HTML 标签页,或打开专门的 Markdown 转 HTML 转换器。
HTML in:
<h2>Pricing</h2>
<p>Plans start at <strong>$9/mo</strong>. See the <a href="https://example.com/pricing">details</a>.</p>
<table>
<thead><tr><th>Plan</th><th>Price</th></tr></thead>
<tbody><tr><td>Pro</td><td>$9</td></tr></tbody>
</table>
Markdown out:
## Pricing
Plans start at **$9/mo**. See the [details](https://example.com/pricing).
| Plan | Price |
| ---- | ----- |
| Pro | $9 |
<!-- <div>, classes, and inline styles in the source are dropped — Markdown can't represent them. --> 核心功能
GFM 感知输出
以 GitHub Flavored Markdown 为目标,而非仅仅纯 CommonMark:HTML 表格变成管道表格,复选框 <li> 变成任务列表(`- [x]`),<del>/<s> 变成 ~~删除线~~。这份 Markdown 可直接放进 README、GitHub issue 或文档站点,并以相同方式渲染。
ATX 或 Setext 标题
选择井号前缀的 ATX 标题(# H1)或加下划线的 Setext 标题(H1 用 ===,H2 用 ---)。Setext 只覆盖前两个级别,所以转换器会对 H3 及更深层自动回退到 ATX——你绝不会得到无效的标题。
内联或引用链接
在内联链接——[text](url) 紧挨散文——和引用链接(把每个 URL 收集进文档脚部的编号列表)之间切换。引用风格让链接密集的段落保持可读,并能按标签复用某个 URL。
围栏代码块
一个 <pre><code> 块会变成带三个反引号的围栏代码块,<code> 元素上的 language- 类会作为围栏的信息串延续下来。内联 <code> 变成反引号 span,使代码片段完整地走完整段旅程。
处理嵌套列表和表格
遍历真实的 DOM,所以嵌套的 <ul>/<ol> 结构会转换成正确缩进的 Markdown 列表,有序列表从 1 重新编号。简单表格扁平化为管道表格;真正复杂的则回退为原始 HTML,而非丢失数据。
100% 私密,浏览器内运行
每一次转换都用 JavaScript 在本地进行——你的 HTML 和生成的 Markdown 绝不离开你的设备,绝不触及服务器,并在页面加载后离线工作。可安全用于内部 CMS 导出、客户内容和未发布的页面。
示例
网页 <table> 转 GFM 管道表格
<table>
<thead><tr><th>Region</th><th>Sales</th></tr></thead>
<tbody>
<tr><td>EMEA</td><td>1,204</td></tr>
<tr><td>APAC</td><td>980</td></tr>
</tbody>
</table> | Region | Sales | | ------ | ----- | | EMEA | 1,204 | | APAC | 980 |
一个抓取或复制来的 HTML <table> 会坍缩成一个 GitHub Flavored Markdown 管道表格。<thead> 行变成表头,带短横线的分隔行会为你生成,每个 <tr> 变成一行管道分隔的内容——可直接放进 README 或文档页。
链接:内联 vs 引用风格
<p>Read the <a href="https://example.com/guide">setup guide</a> and the <a href="https://example.com/api">API reference</a>.</p>
Inline: Read the [setup guide](https://example.com/guide) and the [API reference](https://example.com/api). Reference: Read the [setup guide][1] and the [API reference][2]. [1]: https://example.com/guide [2]: https://example.com/api
同样的锚点有两种渲染方式。内联把 URL 留在文本旁边;引用风格把每个 URL 移到文末的编号列表中,当一句话带多个链接时能让长段落保持可读。用「链接」单选框选择风格。
嵌套的 <ul>/<ol> 转缩进的 Markdown 列表
<ul>
<li>Build
<ol>
<li>Compile</li>
<li>Bundle</li>
</ol>
</li>
<li>Ship</li>
</ul> - Build 1. Compile 2. Bundle - Ship
嵌套通过缩进保留:内层 <ol> 缩进两个空格位于其父 <li> 之下,并从 `-` 项目符号切换到 `1.` 编号。Markdown 会自动重新编号有序列表,所以即便 HTML 用了显式的 value 属性,源码也保持干净。
一段网页 HTML 转干净的 Markdown
<article> <h1>Changelog</h1> <p>We shipped <strong>dark mode</strong> and fixed <code>parseDate()</code>.</p> <blockquote><p>Thanks to everyone who reported it.</p></blockquote> </article>
# Changelog We shipped **dark mode** and fixed `parseDate()`. > Thanks to everyone who reported it.
粘贴一段真实页面——<article> 外壳被丢弃(Markdown 没有容器元素),<h1> 变成 `#`,<strong> 变成 `**`,内联 <code> 变成反引号,<blockquote> 变成 `>` 行。没有 Markdown 等价物的结构性外壳就此消失。
如何将 HTML 转换为 Markdown
- 1
粘贴你的 HTML
放入一份复制的网页、一份 CMS 或所见即所得编辑器的导出,或一段抓取来的 HTML 片段。DOM 会在你粘贴时于浏览器中被解析并序列化为 Markdown——无需上传,除浏览器内存外没有大小上限。
- 2
选择标题和链接风格
选择 ATX(#)或 Setext(===)标题,以及内联或引用链接。Markdown 会实时重新渲染,让你即时对比各种风格。输出以 GitHub Flavored Markdown 为目标——包含表格、任务列表和删除线。
- 3
复制或下载
点击「复制」获取 Markdown,或点击「下载」保存为 .md 文件。要反向操作,切换到 Markdown → HTML 标签页并粘贴你的 Markdown,即可得到渲染后的 HTML。
常见误区
指望 <div>/<span> 结构存活
通用容器没有 Markdown 等价物,所以会被脱壳——它们的内容保留,但标签连同其上任何类或样式都消失。如果你的版式依赖某个包裹 <div> 或一个带样式的 <span>,那种样式在 Markdown 里就没了。这是预期,不是 bug;Markdown 根本无法表达它。
<div class="callout warning"><span style="color:red">Heads up!</span></div> <!-- expecting the callout box and red colour to survive -->
Heads up! <!-- container and styles dropped; only the text remains in Markdown -->
段落内丢失的 <br> 换行
段落内的 <br> 是一个软换行,Markdown 用换行前的两个末尾空格(或一个反斜杠)来表示。粘贴 HTML 并指望可见的换行存活,可能在相邻行重排成一行时让你意外。转换器会输出硬换行形式,但如果你之后手动编辑,请不要删掉那两个末尾空格。
Line one<br>Line two <!-- if the break form is removed, these merge into one line -->
Line one Line two <!-- two trailing spaces preserve the <br> as a hard break -->
深度嵌套表格退化
GFM 管道表格不能嵌套或容纳块级内容。一个把表格(或列表、或多个段落)放进单元格的遗留布局,无法变成干净的管道表格——转换器尽量扁平化它能处理的部分,并把其余留作原始 HTML,使一切不丢失。修复之道是简化源,而非简化输出。
<table><tr><td><table><tr><td>inner</td></tr></table></td></tr></table> <!-- nested table can't become a flat pipe table -->
<!-- Flatten to a single-level table first: --> <table><tr><td>inner</td></tr></table> → | inner | | ----- |
指望 <script> 或样式存活
<script>、<style> 和头部级元素是代码和呈现,不是文档内容,所以会被完全剥离——不转换,也不保留为原始 HTML。粘贴整页并指望行为或 CSS 带进 Markdown,会让你失望。Markdown 是内容格式;如果你需要代码或样式,请保留 HTML。
<style>.x{color:blue}</style>
<script>track()</script>
<p>Body</p>
<!-- expecting the style and script to come through --> Body <!-- only the content survives; <script>/<style> are dropped -->
常见使用场景
- 把网页或 CMS 内容迁入 Notion、Obsidian 或静态站点
- 把页面从 CMS、WordPress 导出或旧 HTML 站点中拉出来,转换成可直接放进 Notion、Obsidian、Hugo 或 Jekyll 的 Markdown。你用冗长的标记换来可移植的文本,它能在 Git 仓库中干净存放,并在审阅时合理地 diff。
- 从所见即所得编辑器导出
- 富文本编辑器会产出密集、属性繁多的 HTML。把那份输出粘到这里,恢复其底下干净的 Markdown——标题、列表、链接和强调——这样内容就能迁入文档流程或基于 Markdown 的知识库,而不必锁死在编辑器里。
- 把 HTML 清洗成 Markdown 以喂给 LLM 和 RAG 流程
- 原始 HTML 把 token 烧在模型从不需要的标签、脚本和样式上。把抓取来的页面转换为 Markdown 能剥离这些噪声,同时保留 LLM 读得很好的结构,于是你能在上下文窗口里塞进更多真正的内容,并为检索得到更干净的嵌入。
- 把富文本粘贴转换为 Markdown
- 从网页、邮件或文档复制带格式的文本,它会作为 HTML 到达剪贴板。把它粘到这里,把那段富文本变成你可以提交、放进 pull request 或写进笔记的 Markdown——格式保留,杂乱清除。
- 把页面归档为 Markdown
- 把一个网页有意义的内容存为一个小巧、面向未来的 .md 文件,而不是一份满是脚本和追踪代码的沉重 HTML 快照。Markdown 几十年后在任何文本编辑器中仍保持可读,且只占一小部分空间。
- 把遗留的 HTML 文档变成 Markdown
- 用手写 HTML 编写的旧文档维护起来很痛苦。把它转换为 Markdown,带进现代的文档即代码工作流——在那里它可以被 lint、在 pull request 中审阅,并由静态站点生成器渲染。
技术细节
- CommonMark 与 GitHub Flavored Markdown 输出
- 转换器可以目标为纯 CommonMark,或者(默认)GitHub Flavored Markdown 超集。CommonMark 精确定义了标题、强调、列表、链接、图片、代码和引用块。GFM 增加了四种可直接从常见 HTML 映射的构造:<table> → 管道表格、复选框列表项 → 任务列表、<del>/<s> → 删除线、裸 URL → 自动链接。由于大多数网页内容都用到表格之类,GFM 输出是实用的默认;仅当目标渲染器不理解 GFM 扩展时才选 CommonMark,此时表格会回退为原始 HTML。
- 有损、不可逆的转换——直言不讳
- HTML 严格地比 Markdown 更具表现力,所以转换不可能无损,把这点说在前头是值得的。Markdown 没有表示 <div>、<span> 或其他通用容器的语法;没有承载类名、id、内联 style、colspan/rowspan 或任意 data-* 属性的方式;也没有对大多数语义或布局元素的表示。这些要么被脱壳(保留内容、丢弃标签),要么被丢弃(属性),要么——当丢弃会损失含义时——被保留为原始内联 HTML。HTML → Markdown → HTML 的往返不会重现原文。这是有意的取舍:Markdown 的存在是为了干净、可 diff、人类可编辑,而非镜像 HTML。大多数竞品对此含糊带过;把它说清楚,能让你睁着眼睛决定 Markdown 是否是合适的目标。
- 风格取舍:ATX/Setext、内联/引用、围栏/缩进
- 三个输出选择各有实在的取舍。ATX 标题(#)覆盖全部六个级别且便于 grep;Setext(加下划线)只存在于 H1/H2,所以工具为前两级输出它,往下回退到 ATX。内联链接把 URL 留在文本旁——最适合稀疏链接;引用链接把 URL 拉到文档脚部——最适合链接密集的散文和按标签复用。对于代码,围栏块(三个反引号)能携带语言信息串并安全嵌套,而缩进(四空格)代码块无法表达语言、且在列表内会出错——所以本转换器始终从 <pre><code> 输出围栏块。
最佳实践
- 在转换前先格式化 HTML
- 压缩过或深度缠绕的 HTML——尤其是嵌套布局表格和零散的内联元素——在先被整理成良构后转换得更干净。把杂乱的源跑一遍我们的 HTML 格式化工具 来美化排版并规范化它,然后再转换。干净的输入产出干净的 Markdown,更少回退到原始 HTML。
- 预期并审阅有损的丢弃
- 把转换当作设计上有损的。类名、内联样式、<div>/<span> 外壳和奇异属性在输出中都没了,而这通常正是你想要的可移植 Markdown——但请扫一遍结果,看看是否有仅存于某个属性中的语义重要信息(一个 aria-label、一个 colspan 合并的单元格),如果它重要,就手动补回去。
- 按文档的链接密度选择链接风格
- 对于偶尔出现一两个链接的散文,用内联链接——URL 留在它的文本旁边,源码读起来自然。当某一节链接密集或复用相同 URL 时,切换到引用链接:把它们拉到文末的编号列表能让段落保持易扫读,并避免重复冗长的 URL。
- 把页面发给 LLM 前先转成 Markdown
- 当你把网页内容喂给模型时——用于提示词、嵌入或 RAG 存储——先把 HTML 转成 Markdown。你会剥离浪费 token 并增加噪声的标签、脚本和样式,保留模型真正用到的结构,并在上下文窗口里塞进多得多的真正内容。
- 转换后核对复杂表格
- GFM 管道表格是扁平的——没有嵌套表格、单元格内没有块级内容、没有合并单元格。在转换一个数据密集或布局型表格后,请核对 Markdown:简单网格转换得很完美,但任何带 colspan 或嵌套块的都会退化,可能以原始 HTML 出现。如果你在意一个干净的管道表格,请先简化源表格。
常见问题
内联链接和引用链接是如何处理的?
ATX 与 Setext 标题——我该用哪个?
Markdown 无法表示的 HTML(如 <div> 和 <span>)会怎样?
它会剥离 <script> 和样式吗?
嵌套表格和列表是如何处理的?
HTML 转 Markdown 是无损的吗?
我能把 Markdown 喂给 LLM 或 ChatGPT 吗?
我的文件会被上传到服务器吗?
它能离线工作吗?
我能把 Markdown 转回 HTML 吗?
相关工具
查看所有工具 →Base64 解码与编码工具
编码和格式化
免费在线 Base64 解码编码工具。实时转换,支持中文和 Emoji,100% 浏览器端运行,数据不离开设备,无需注册。
Base64 转图片转换工具
编码和格式化
在浏览器中把 Base64 字符串或 data URI 解码还原为图片。预览、读取尺寸与 MIME,再下载为 PNG、JPG、GIF、SVG。无需上传。
CSV 转 JSON 转换器
编码和格式化
在浏览器中将 CSV 转换为 JSON。支持 RFC 4180、类型推断、表头行、大整数安全。100% 隐私,无需上传。
图片转 Base64 转换工具
编码和格式化
在浏览器中将图片转换为 Base64 data URI——支持 PNG、JPG、GIF、WebP、SVG、ICO。一键复制 HTML、CSS、Markdown 和 JSON 输出。100% 私密,无需上传。
JSON Diff 对比
编码和格式化
在浏览器中即时对比两份 JSON。Side-by-Side 高亮 + RFC 6902 JSON Patch 输出,一键忽略 timestamps、IDs 等噪音字段。100% 隐私保护,零上传。
JSON 格式化与验证工具
编码和格式化
在浏览器中即时格式化、验证和美化 JSON。免费在线工具,支持语法验证、错误检测、压缩和一键复制,100% 隐私保护。