Markdown 在线预览

轻量 Markdown 渲染:标题/粗斜体/代码/列表/引用/链接/图片/分隔线/表格

输出已转义 HTML 防注入,支持标题、粗体/斜体、行内代码、代码块、列表、引用、链接、图片、分隔线、表格。

Markdown 预览:支持的语法子集与不转义的差别

Markdown 没有唯一的"标准实现"

Markdown 最初由 John Gruber 用一段 Perl 脚本实现,规范描述是自然语言。这导致不同实现(GitHub、CommonMark、各编辑器)在细节上行为不同。后来 CommonMark 试图给出严格规范,GitHub 又在其上扩展出 GFM(GitHub Flavored Markdown)。

所以同一个 Markdown 文件在不同平台渲染结果可能不同。本工具实现的是常用语法的子集,定位是快速预览,不是完整渲染器。

支持的语法

语法写法
标题# 到 ###### 开头
粗体 / 斜体**粗**、*斜*
行内代码反引号包裹
代码块三个反引号围栏(或缩进)
无序 / 有序列表- * + 或 1.
引用> 开头
链接与图片[文字](url)、![说明](url)
分隔线--- 或 ***
表格管道符分隔,第二行写对齐标记

通常不支持或行为不同的部分

特性说明
原始 HTML 直通本工具会对输出做转义,所以直接写 HTML 标签不会渲染成元素,而会显示为文本。这与 GitHub 不同(GitHub 允许有限的 HTML)
任务列表- [ ] 复选框是 GFM 扩展,子集实现通常按普通列表处理
删除线~~文字~~ 是 GFM 扩展
脚注各平台语法不一,不是核心语法
自动链接裸 URL 自动变成链接是 GFM 行为,标准 Markdown 不这样处理
嵌套列表的深度子集实现可能只支持有限的嵌套层级
换行行为行尾加两个空格或反斜杠才换行(标准行为);GFM 里单个换行也换行。这是个常见的跨平台差异

"换行"那条差异最常引起困惑:在 GitHub 里写两行相邻的普通文本会显示为两行,而标准 Markdown 会合并成一行(视为同一个段落)。如果你在别处预览效果与预期不符,先检查这一条。

为什么要转义输出

工具明确说明"输出已转义 HTML 防注入"。这条设计很重要:如果 Markdown 里允许裸 HTML 直通,那么 <script> 之类的标签就会被浏览器执行——这是几乎所有 Markdown 渲染漏洞的根源(用户提交的内容被当成代码执行)。

三个层次的防护,安全性递增:

做法安全性
允许 HTML 直通最危险,等于开放 XSS
转义所有 HTML(本工具的做法)安全,但用户无法插入自定义 HTML
白名单过滤(如 DOMPurify)既允许部分 HTML 又安全,需要在渲染后做净化

所以在自己的项目里渲染用户提交的 Markdown,一定要做转义或白名单净化,不要直接把渲染结果插入 DOM。这类漏洞的后果是攻击者可以在你的页面上执行任意脚本、读取用户数据。

链接与图片的实际行为

工具怎么用

粘贴 Markdown 源码,点渲染,下方显示结果。适合快速检查 README、文档、笔记的排版是否符合预期,以及确认表格、代码块是否写对。全部在浏览器本地渲染,文档内容不会被上传——涉及内部文档时这一点是必要的。

最终发布前建议在目标平台再预览一次,因为各平台对扩展语法的支持不同。

常见问题

为什么链接点了没反应或变 #?

为防止 XSS,链接统一加了 rel="noopener";以 javascript: 开头的危险链接会被替换为 #。