将 HTML 转换为 Markdown
脚本、样式和嵌入媒体会被丢弃;未知标签保留其文本。表格转为 GFM 表格。
把 HTML 变成 Markdown
把博客文章搬进 README、把文档页面搬进维基、把网页文章搬进笔记,意味着在不丢失结构的前提下去掉 HTML。此转换器像浏览器一样解析标记,并写出等价的 Markdown — 标题仍是标题,嵌套列表仍然嵌套,表格仍是表格 — 而脚本、样式和跟踪像素则消失。
步骤
- 1 把 HTML — 整页或片段 — 粘贴到上方框中。多数浏览器可右键页面选择“查看网页源代码”来复制。
- 2 阅读下方的 Markdown;它随输入更新。嵌套列表、带语言的代码块和带对齐的表格都会保留。
- 3 复制结果,或下载为 .md 文件。
什么转成什么
h1 到 h6 标题变为井号标题;p 变为段落,br 变为硬换行,hr 变为分隔线。strong 和 b 变为双星号,em 和 i 变为单星号,del 和 s 变为双波浪线;code 变为反引号,pre 变为围栏代码块并把语言类名保留为围栏标签。链接变为 [文字](url),图片变为 ;ul 和 ol 变为短横线列表和编号列表,以两个空格嵌套;blockquote 变为以大于号开头的行;table 变为 GFM 表格,对齐方式取自 align 属性或 text-align 样式。
为什么基于 DOM 而不是文本
正则表达式无法可靠地处理 HTML:标签会嵌套,属性字符串里会出现尖括号,真实页面也很少格式良好。转换器把 HTML 交给浏览器自带的解析器,它会像渲染时那样修复未闭合和错误嵌套的标签,然后遍历生成的树。这就是列表项里的粗体里的链接也能正确转换的原因。
丢弃什么,保留什么
script、style、head、noscript、template、iframe、object、embed、svg、canvas、video 和 audio 连同内容一起删除 — 它们都没有 Markdown 对应物,而且多数是噪音。其余未识别的内容保留文本:自定义元素、span 或 div 被视为容器,其子节点被转换。因此未知标签内的行内格式得以保留。
转义与干净的输出
会改变 Markdown 含义的字符 — 星号、下划线、反引号、反斜杠,以及行首的井号或短横线 — 都在文本中转义,这样把 Markdown 转回 HTML 会得到同样的结果。空白像浏览器那样折叠,pre 内部除外。块之间的空行压缩为一行。