Markdown 转 HTML 转换器
在浏览器中将 Markdown 转换为 HTML——完整支持 GitHub Flavored Markdown、实时预览、语法高亮。可导出 HTML 片段、完整文档,或邮件安全的内联样式 HTML。100% 私密,无需上传。
自定义 CSS
我们的团队依据 CommonMark 规范和 GitHub Flavored Markdown 规范验证 Markdown 转 HTML——基于 AST 的「先解析后序列化」模型、四项 GFM 扩展(表格、任务列表、删除线、自动链接)、防 XSS 的沙箱预览渲染,以及 HTML 邮件客户端的内联样式要求。
什么是 Markdown 转 HTML?
Markdown 转 HTML 会把一份用 Markdown 编写的纯文本文档——用 # 表示标题、**bold**、用 - 表示列表、用 [text](url) 表示链接——转换成浏览器、内容管理系统和邮件客户端真正显示的 HTML。Markdown 的设计目标是原样可读、易于书写,但浏览器并不理解 # Heading;它理解的是 <h1>Heading</h1>。转换正是弥合这道鸿沟。
在底层,Markdown 处理器先把你的源文档解析成一棵抽象语法树(AST)——一种结构化表示,其中标题、段落、列表和代码块各自是带有内容和属性的不同节点。随后它把那棵树序列化为 HTML,输出正确的标签与嵌套。通过 AST 处理,而不是用正则表达式替换文本,正是转换器能正确且可预测地处理嵌套列表、表格和嵌入式 HTML 的原因。两种公认的语法是 CommonMark(精确的标准)和 GitHub Flavored Markdown(GFM),后者在其之上扩展了表格、任务列表、删除线和自动链接。
之所以要转换,是因为几乎每一个发布目标都想要 HTML 而非 Markdown。静态站点生成器、CMS 富文本字段、邮件模板和浏览器标签页,渲染的都是 HTML。所以典型的工作流是用舒适的 Markdown 来写——README、文档、博客草稿、笔记——并在发布时转换为 HTML。本工具在本地完成这一转换并显示实时预览,让你看到渲染结果,并以你需要的形态复制确切的 HTML:片段、完整页面,或邮件就绪的内联样式标记。
反向操作——HTML 转回 Markdown——在你把现有网页内容迁入基于 Markdown 的系统时同样有用。为此,请切换到 HTML → Markdown 标签页,或打开专门的 HTML 转 Markdown 转换器。
Markdown in:
# Release Notes
We shipped **tables** and `code`:
| Feature | Status |
| ------- | ------ |
| GFM | Done |
- [x] Parse to an AST
- [ ] Profit
HTML out:
<h1>Release Notes</h1>
<p>We shipped <strong>tables</strong> and <code>code</code>:</p>
<table>
<thead><tr><th>Feature</th><th>Status</th></tr></thead>
<tbody><tr><td>GFM</td><td>Done</td></tr></tbody>
</table>
<ul class="contains-task-list">
<li class="task-list-item"><input type="checkbox" checked disabled> Parse to an AST</li>
<li class="task-list-item"><input type="checkbox" disabled> Profit</li>
</ul> 核心功能
实时分栏预览
在左侧输入 Markdown,看着它在右侧实时渲染,下方的 HTML 输出也随之构建。预览在沙箱 iframe 中渲染,所以你所见即浏览器所示——而粘贴进来的脚本无法运行。
完整的 GitHub Flavored Markdown
不止 CommonMark——而是完整的 GFM 超集:管道表格、任务列表(- [x])、删除线(~~)、自动链接的 URL,以及围栏代码块。为 GitHub 写的 README 或 issue 在这里的渲染与那边完全一致。
语法高亮
用语言名标注围栏代码块(```js、```python、```sql),转换器就会高亮它,把 token 包进带语言类的 span 中,并在 <code> 元素上加类。在你的页面上配合一份高亮样式表即可着色。
三种输出格式
导出 HTML 片段(用于模板或 CMS 的正文标记)、完整文档(可另存为 .html 的独立 <!doctype html> 页面),或邮件内联 HTML——样式被搬到每个元素上,让 Outlook 等客户端正确渲染。
自定义 CSS 面板
把你自己的 CSS 注入实时预览,以匹配某站点的排版或模仿 GitHub 的 README 样式。输入像 h1 { color: #0969da; } 这样的规则,预览会即时更新,而不触动你复制出去的干净 HTML。
GFM 语法速查表
一份产出 HTML 的语法快速参考:# H1 → 标题、**bold** → <strong>、*italic* → <em>、- item → 列表、1. item → 有序列表、[text](url) → 链接、`` code `` → 内联代码、` ```lang → 围栏代码、> quote → 引用块、| a | b | → 表格、- [ ] → 任务列表、~~text~~` → 删除线。
100% 私密,浏览器内运行
每一次转换都用 JavaScript 在本地进行——你的 Markdown 和 HTML 绝不离开你的设备,绝不触及服务器,并在页面加载后离线工作。可安全用于未发布的文档、内部 README 和禁运期的发布说明。
示例
GFM 表格转 HTML <table>
| Tool | Speed | | ---- | ----- | | GFM | Fast |
<table> <thead><tr><th>Tool</th><th>Speed</th></tr></thead> <tbody><tr><td>GFM</td><td>Fast</td></tr></tbody> </table>
GitHub Flavored Markdown 的管道表格并不属于纯 CommonMark,但本转换器能识别它们,并生成带 <thead> 和 <tbody> 的规范语义 <table>——可直接用于设置样式或放进 CMS。
任务列表转复选框 HTML
- [x] Write the README - [ ] Convert it to HTML
<ul class="contains-task-list"> <li class="task-list-item"><input type="checkbox" checked disabled> Write the README</li> <li class="task-list-item"><input type="checkbox" disabled> Convert it to HTML</li> </ul>
GFM 的任务列表语法 - [x] / - [ ] 会变成真正的禁用复选框输入框,与 GitHub 渲染清单的方式完全一致——这样复制来的 README 在你自己的页面上看起来也一样。
围栏代码块转高亮的 <pre><code>
```js const html = md.render(src) ```
<pre><code class="language-js"><span class="hljs-keyword">const</span> html = md.render(src) </code></pre>
在起始围栏后写上语言名,转换器就会应用语法高亮,把 token 包进 span,并在 <code> 元素上加上 language-js 类。配合一份高亮样式表,代码就会被着色。
README 转完整 HTML 文档
# My Project A short description and a [link](https://example.com).
<!doctype html> <html lang="en"> <head><meta charset="utf-8"><title>My Project</title></head> <body> <h1>My Project</h1> <p>A short description and a <a href="https://example.com">link</a>.</p> </body> </html>
把输出切换为「完整文档」,转换器就会把渲染后的 HTML 包进一个带 <head> 和字符集的完整 <!doctype html> 页面——一个可在任意浏览器中打开或直接下载的独立 .html 文件。
如何将 Markdown 转换为 HTML
- 1
键入或粘贴你的 Markdown
把你的 Markdown——一份 README、发布说明、issue 正文——放进输入窗格。完整支持 GitHub Flavored Markdown:表格、任务列表、删除线、自动链接和围栏代码块。实时预览和 HTML 输出会随你输入而更新,全程在你的浏览器中。
- 2
选择一种输出格式
选择 HTML 片段以粘进模板或 CMS、完整文档以得到独立的 .html 页面,或邮件内联以获得能在 Outlook 中存活的内联样式 HTML。给代码围栏加上语言标签以启用语法高亮,并用「自定义 CSS」面板为预览设置样式。
- 3
复制或下载
点击「复制」获取 HTML,或点击「下载」将其保存为文件。要反向转换,切换到 HTML → Markdown 标签页并粘贴你的 HTML,即可得到干净的 Markdown。
常见误区
散文中未转义的 HTML 被吞掉
Markdown 会放行原始 HTML,所以你本想作为文本的尖括号——比如在写一个 <Component> 或泛型 List<T> 时——会被解析为 HTML 标签并从输出中消失。请用反斜杠或 HTML 实体转义尖括号,或把文本包进代码 span,使其按字面渲染。
Use the <Header> component to wrap pages. <!-- <Header> is parsed as a tag and vanishes -->
Use the `<Header>` component to wrap pages. <!-- backticks keep it literal: renders <Header> -->
表格管道符错位或格式错误
GFM 表格需要一个表头行、一个由短横线组成的分隔行,以及每行至少一个管道符。漏掉分隔行,或列数与表头不同,都会破坏表格——它会退化成一段管道符组成的普通段落。各单元格在视觉上无需对齐,但每行必须有相同的列数。
| Name | Role | | Alice | Admin | <!-- no |---|---| delimiter row: not a table -->
| Name | Role | | ---- | ---- | | Alice | Admin | <!-- delimiter row present: renders a table -->
没有语言的代码围栏
一个没有语言信息串的围栏代码块会渲染为没有语言类的 <pre><code> 块,因此得不到语法高亮。代码仍会显示,只是单色。请在起始反引号后立即加上语言以启用高亮;反引号和名称之间的空格会禁用它。
``` const x = 1 ``` <!-- no language → no highlighting -->
```js const x = 1 ``` <!-- language-js → highlighted -->
在需要完整文档处用了片段
把 HTML 片段输出直接复制并另存为 .html 文件,会产生一个没有 doctype、没有字符集、没有 <html>/<head>/<body> 的页面。浏览器往往仍能渲染它,但怪异模式和缺失的字符集会破坏带重音的字符与版式。当 HTML 必须独立存在时,请切换到完整文档格式。
<h1>Title</h1> <p>Saved as page.html — no doctype, no charset.</p>
<!doctype html> <html lang="en"><head><meta charset="utf-8"><title>Title</title></head> <body><h1>Title</h1><p>Complete, standalone page.</p></body></html>
常见使用场景
- 发布到静态站点或 CMS
- 用 Markdown 写内容,转换为 HTML 片段,粘进静态站点模板或 CMS 富文本字段。你会得到干净的语义标记——标题、列表、表格——而不被页面外壳碍事。
- 推送前预览 README
- 粘贴你的 README.md,看着实时预览以完整 GFM 渲染它——表格、任务列表、围栏代码——这样你能在提交前、而非在 GitHub 把它展示给全世界之后,就抓到坏掉的表格或缺失的代码围栏。
- 把笔记变成可分享的网页
- 用 Markdown 写的会议笔记、设计文档或草稿,一键就变成一个完整的 HTML 页面。选择「完整文档」,下载 .html 文件,你就拥有了可在任意浏览器中打开、可托管在任何地方的东西。
- 构建邮件安全的内联样式 HTML
- 邮件客户端会剥离 <style> 块,所以用 Markdown 写你的消息,再导出「邮件内联」格式——它把 CSS 搬到每个元素的 style 属性上。结果在 Outlook 等忽略文档级样式的客户端中也能正确渲染。
- 把 .md 文件转成可下载的 .html
- 需要一份 Markdown 文档的离线、自包含 HTML 版本?粘贴它,选「完整文档」,然后「下载」——你会得到一个带正确 doctype 和字符集的独立 .html 文件,无需构建工具或命令行。
- 在应用中嵌入渲染后的文档
- 正在用仓库里存储的 Markdown 生成文档、变更日志或帮助内容?用本工具看清给定的 Markdown 源会产出怎样的 HTML,从而对齐你应用的渲染器并为输出设置样式。
技术细节
- CommonMark 与 GitHub Flavored Markdown
- CommonMark 是严格、无歧义的 Markdown 规范,精确定义了标题、强调、列表、链接和代码块如何解析。GitHub Flavored Markdown(GFM)是一个严格超集:它保留 CommonMark 定义的一切,并增加四项扩展——管道表格、任务列表项(
- [x])、删除线(~~text~~)和自动链接的裸 URL。因为 GFM 只是增加功能,任何有效的 CommonMark 文档也都是有效的 GFM。本转换器实现 GFM 超集,所以为任一种语法编写的文档都能正确渲染。 - 防 XSS 的沙箱渲染
- Markdown 有意允许嵌入原始 HTML,这意味着一份 Markdown 文档可能含有 <script> 标签或像 onerror 这样的事件处理器。实时预览通过在禁用脚本的 <iframe sandbox=""> 内渲染来防范此类情况,因此你输入中的活动内容在你预览时无法执行——这在你转换来自不受信任来源的 Markdown 时很重要。工具输出的序列化 HTML 是对你输入的忠实渲染;如果你打算发布从不受信任的 Markdown 派生出的 HTML,请先在服务器端用 DOMPurify 之类的消毒器处理它,再提供给他人。
- 邮件 HTML 兼容性
- HTML 邮件由一批 CSS 支持出了名地有限的引擎渲染。Windows 上的 Outlook 使用 Word 的渲染引擎,会忽略文档头部的 <style> 块,因此任何基于类的样式都会悄无声息地消失;可靠的做法是在每个元素上用内联 style 属性,这正是「邮件内联」输出所产生的。图片是另一个陷阱:许多客户端在收件人选择前会拦截远程图片,所以把小图片作为 data URI 嵌入能让它们立即渲染,而大型远程图片可能根本不显示。请让标记保持简单,并在你的目标客户端间测试。
- 浏览器内同步高亮
- 当一个围栏代码块带有语言信息串(```js)时,转换器会对其内容运行一个同步高亮器,对源码进行分词,并把每个 token 包进一个带 hljs-keyword 或 hljs-string 之类类名的 <span>,同时在 <code> 元素上加一个 language-js 类。高亮只是结构性的——它添加的是类,不是颜色——所以目标页面需要一份匹配的高亮样式表来渲染色板。因为它在浏览器中同步运行,高亮后的 HTML 在你输入的瞬间就会出现,没有网络调用。
最佳实践
- 为目标场景选择输出格式
- 让格式匹配 HTML 的去处。CMS 字段或模板已有页面外壳,所以粘贴 HTML 片段。一个你想在浏览器中直接打开的文件需要带 doctype 和字符集的完整文档。邮件需要邮件内联,让样式在剥离 <style> 块的客户端中存活。粘贴错误的形态是最常见、本可避免的失误。
- 始终给代码围栏标注语言
- 在起始反引号后立即写上语言——```js、```python、```sql——中间不留空格,让转换器能高亮该块并加上正确的语言类。裸围栏会产生无样式、无高亮的代码。请使用高亮器能识别的语言;未知或拼错的名称会回退为纯文本。
- 发布不受信任的 Markdown 前先消毒
- 预览有沙箱,但工具输出的 HTML 是忠实渲染——包括输入中任何原始 HTML 或 <script>。如果那份 Markdown 来自用户或其他不受信任的来源,且你打算把结果提供给他人,请先在服务器端用 DOMPurify 之类的消毒器处理 HTML。沙箱在转换时保护你,而不是在你发布后保护你的访客。
- 邮件 HTML 保持简单并内联
- 对于邮件,优先用「邮件内联」格式,让版式保持简单,并避免 Outlook 等客户端会丢弃的 CSS 特性。把小图片作为 data URI 内联,使它们即便在远程图片被拦截时也能渲染,并且在大范围发送前务必先给自己发一封测试——邮件渲染是 HTML 所面对的最不宽容的目标。
- 在文本中转义字面 HTML 字符
- 如果你想让字面的 < 或 & 作为文本出现,而不是被解释为标签或实体,请用反斜杠(\<)或 HTML 实体(<)转义它。Markdown 会原样放行原始 HTML,所以散文中未转义的 <example> 可能被当作未知标签吞掉,从渲染输出中消失。
常见问题
它支持 GitHub Flavored Markdown(GFM)吗?
- [x] / - [ ])、用 ~~text~~ 的删除线、自动链接的 URL,以及带语言信息串的围栏代码块。也就是说,为 GitHub 编写的 README、issue 正文或 wiki 页面在这里的渲染方式与 GitHub 完全相同,所以你的 README 预览 在推送前就能反映真实效果。纯 CommonMark 文档同样适用——GFM 只增加功能,绝不删减。 如何获得邮件安全的内联样式 HTML?
HTML 片段和完整文档有什么区别?
渲染出的 HTML 预览是否能防 XSS?
我可以给预览添加自己的 CSS 吗?
我的文件或文本会被上传到服务器吗?
它能离线工作吗?
如何把 Markdown(.md)文件转换成 HTML 文件?
为什么我的代码块没有高亮?
我能把 HTML 转回 Markdown 吗?
相关工具
查看所有工具 →Base64 解码与编码工具
编码和格式化
免费在线 Base64 解码编码工具。实时转换,支持中文和 Emoji,100% 浏览器端运行,数据不离开设备,无需注册。
Base64 转图片转换工具
编码和格式化
在浏览器中把 Base64 字符串或 data URI 解码还原为图片。预览、读取尺寸与 MIME,再下载为 PNG、JPG、GIF、SVG。无需上传。
CSV 转 JSON 转换器
编码和格式化
在浏览器中将 CSV 转换为 JSON。支持 RFC 4180、类型推断、表头行、大整数安全。100% 隐私,无需上传。
.env 转 JSON 转换器
编码和格式化
粘贴 .env 文件,立即得到 JSON。数据库密码、API 密钥和令牌绝不离开你的浏览器 — 100% 本地、零上传、免费的 dotenv 解析器。
免费 HTML 实体解码器 — 解码 HTML
编码和格式化
在线解码 HTML 实体、还原转义后的 HTML——免费、免注册、100% 在浏览器中运行。把命名、十进制和十六进制引用转回字符;绝不上传。
免费 HTML 实体编码器 — 转义 HTML
编码和格式化
在线编码 HTML 实体、转义特殊字符(< > & " ')——免费、免注册、100% 在浏览器中运行。支持命名、十进制或十六进制输出;绝不上传。