HTML 转 Markdown 指南:保留结构、链接、表格与图片
你需要把 CMS 导出的文章迁移到 Git、把知识库页面交给 Markdown 编辑器,或把网页中的标题、列表和表格整理成可审阅的文档。直接复制网页通常会带入样式、脚本和不可见节点,手写又容易漏掉链接和图片。本指南用 WebUtils HTML 转 Markdown 工具完成结构化转换,并把“自动生成”与“人工校对”明确分开。
先明确转换目标
HTML 转 Markdown 是语义降维:保留内容结构,舍弃大部分视觉样式。
HTML 能表达任意 CSS、交互和嵌套组件,Markdown 只覆盖标题、段落、强调、列表、链接、图片、代码和有限的表格。因此转换器应被当作迁移起点,而不是所见即所得的完整复刻。页面支持 ATX 标题(#)或 Setext 标题(下划线形式),也支持 *、-、+ 三种无序列表标记;选择要与仓库的 Markdown 规范一致。
哪些结构能保留,哪些会丢失
| HTML 结构 | 常见 Markdown 输出 | 迁移注意 |
|---|---|---|
h1 到 h6 |
# 到 ###### |
标题层级可能需要重新整理 |
p、br |
空行和换行 | 连续 br 不一定有同样视觉效果 |
strong、em |
**、* |
嵌套强调要检查标记闭合 |
ul、ol |
- 或 1. 列表 |
深层嵌套需手工看缩进 |
a |
文字 |
相对链接和锚点可能失效 |
img |
!替代文本 |
懒加载、尺寸和 CDN 参数需复核 |
pre、code |
围栏代码块 | 语言标识通常无法自动确定 |
table |
Markdown 表格 | 合并单元格、复杂表头会降级 |
script、style |
通常丢弃 | 仍应检查是否有隐藏内容残留 |
转换前先确定“只要正文”还是“保留导航与脚注”。整页 HTML 常包含菜单、Cookie 提示和推荐卡片;把这些一起转进去会污染文章。最可靠的输入是内容区域的 HTML 片段,而不是整个网站源码。
WebUtils 工具页操作步骤
- 打开 HTML 转 Markdown 转换器,确认左侧是 HTML 输入区、右侧是 Markdown 输出区。
- 从浏览器开发者工具或 CMS 导出内容区域,复制真实 HTML。不要把页面中的密码、令牌、用户资料一起粘贴。
- 选择标题风格:仓库普遍使用
#时选 ATX;旧文档明确要求下划线标题时才选 Setext。 - 选择无序列表符号,保持与现有仓库的 lint 规则一致。不同符号混用会制造无意义的 diff。
- 点击“开始转换”,先观察标题、列表、链接、图片和代码块,再复制结果。
- 用 Markdown 预览器渲染输出,重点检查嵌套列表、表格对齐和链接是否可点击。
- 把相对 URL 转成仓库或站点实际路径;确认图片有替代文本,代码块补上语言标识。
- 删除导航、广告、隐藏文本和重复标题,最后用 HTML/Markdown 格式化工具整理换行。
工具使用浏览器中的 Turndown 逻辑转换常见节点,适合中小型片段。它不会抓取远程网页、下载图片或替你判断文章主内容;输入必须由你提供,输出仍需要审阅。
前后对照:一个内容卡片如何变化
输入 HTML:
<article> <h2>部署步骤</h2> <p>先安装 <strong>Node.js 20</strong>,再运行 <code>npm install</code>。</p> <ul><li>准备环境</li><li>运行测试</li></ul> <p><a href="/docs/start">查看完整文档</a></p> </article>
输出 Markdown 可能是:
## 部署步骤 先安装 **Node.js 20**,再运行 `npm install`。 - 准备环境 - 运行测试 [查看完整文档](/docs/start)
这里结构和强调被保留,article 容器本身被省略。若目标仓库部署在子路径,/docs/start 可能需要改成相对路径或完整 URL;转换器不会知道你的发布基路径。
表格、链接和图片的人工复核
表格。 简单的矩形表格可以转成 Markdown;rowspan、colspan、多行表头和单元格内 HTML 常会被展平。合并单元格的语义不能靠对齐空格恢复,应改成列表、分节表格或保留原 HTML。
链接。 文字为空的链接、JavaScript 链接、下载链接和带追踪参数的链接需要单独处理。把 javascript:void(0) 直接写进 Markdown 不但无用,还可能制造安全问题。内部链接迁移后要检查大小写、末尾斜杠和锚点。
图片。 src 可能只是占位图,真实地址藏在 data-src;转换器只能看到输入中的属性。图片尺寸、懒加载、鉴权 CDN 和相对路径都需要人工修复,替代文本也不能用文件名敷衍。
代码与特殊字符
HTML 中的 <、& 等实体会被还原为可读字符,但在代码示例中应保留字面含义。比如 <button> 出现在代码块内时,Markdown 输出必须继续位于围栏中,不能被当作 HTML 标签。
<button type="submit">保存</button>
如果原文是 <pre><code class="language-js">...</code></pre>,语言类名通常可以帮助你手工补上 `js 。转换器不一定能识别所有类名,也不会验证代码是否可运行。迁移后应让对应语言的格式化器或测试工具接手。
错误表:转换成功不等于内容正确
| 问题 | 常见来源 | 修复方法 |
|---|---|---|
| 输出夹杂导航和广告 | 输入了整页 HTML | 只复制主内容容器,或先删除非正文节点 |
| 标题层级跳跃 | 原站靠 CSS 调字号 | 按文章语义重排 h2/h3,不要只看视觉大小 |
| 列表变成连续文本 | li 外层结构不完整 |
补齐 ul/ol,再转换并检查缩进 |
| 表格列错位 | 合并单元格或单元格含换行 | 改为简单表格或保留 HTML |
| 图片显示不出来 | 相对 URL、懒加载或鉴权 | 替换为可访问 URL,补 alt 并确认权限 |
| 内部链接 404 | 发布基路径发生变化 | 根据站点路由改写相对链接并批量检查 |
代码中的 < 被解释成标签 |
未放入代码围栏 | 使用 fenced code block,并指定语言 |
| 空白过多或段落粘连 | 原 HTML 依赖 CSS margin | 用 Markdown 空行重建段落,不要复制样式属性 |
| 复制后出现不可见字符 | 富文本剪贴板带零宽空格 | 在编辑器显示不可见字符并清理 |
| XSS 风险被带入 | 保留了事件属性或危险 URL | 删除 on* 属性、脚本和 javascript: 链接 |
每次转换后至少抽查一个标题、一个嵌套列表、一个链接、一个图片和一个代码块。只看输出长度无法发现结构性丢失。
真实场景:文档迁移的四条路线
CMS 迁移到 Git。 从文章正文容器复制 HTML,转换成 ATX 标题后提交到仓库。迁移脚本统一内部链接和图片目录,再让 Markdown 预览器逐篇检查,避免把 CMS 的推荐模块也提交。
知识库归档。 旧系统导出带表格和脚注的 HTML。先转换主文,脚注改成“参考资料”列表;复杂合并表格保留一小段 HTML,保证信息不被错误展平。
API 文档重写。 HTML 示例常含 <code> 和 <pre>。转换后给代码块补语言标识,再在 CI 中运行格式化器,确保复制出来的命令不会因实体解码而变化。
网页研究笔记。 只保留选中的内容片段,并记录原页面 URL 和抓取日期。转换结果用于个人笔记,不应把受版权限制的整页内容重新发布。
安全、版权与隐私边界
- 浏览器本地转换减少了上传路径,但剪贴板、下载文件和屏幕共享仍可能泄露内部文档。
- 转换器不会主动执行输入脚本;输出放入网站前仍要按发布系统做 HTML 清洗,不能把 Markdown 当作天然安全。
- 删除
javascript:链接、内联事件和可疑 iframe;Markdown 中的 URL 仍可能指向钓鱼站点。 - 只处理你有权复制和再发布的内容。网页转 Markdown 不会自动消除版权、个人信息或访问控制义务。
- 图片和附件可能需要登录才能访问。迁移前确认许可证、存储位置和失效策略。
常见问题
能不能直接输入一个网页 URL?
当前页面的输入是 HTML 文本,不负责联网抓取。先在有权限的环境中取得正文 HTML,再粘贴转换;这样也更容易排除导航和广告。
为什么 CSS 的颜色、字号和布局没有保留?
Markdown 主要表达文档结构,不是完整样式表。颜色和布局属于 CSS 视觉层,转换后通常丢弃;若信息依赖颜色,必须改写成文字、图标或表格。
复杂表格应该怎么办?
先判断读者是否需要合并单元格。如果需要,保留一小段可控 HTML;如果不需要,把它拆成多个简单 Markdown 表格或定义列表,避免转换器生成难以维护的伪表格。
相对链接为什么在新站点失效?
链接是相对于原页面 URL 解析的,迁移后目录层级变了。把内部路径映射到新路由,补上锚点和末尾斜杠规则,再批量请求检查状态码。
转换会下载远程图片吗?
不会。输出通常只保留 src URL。图片是否可访问、是否需要鉴权、是否应迁入自己的存储,都要在后续资产迁移阶段处理。
Markdown 中可以继续嵌入 HTML 吗?
可以,许多渲染器支持少量 HTML。应限制在表格、细节折叠等确有必要的场景,并确认发布系统会安全清洗;不要把整套原站 DOM 原样塞回 Markdown。
发布前清单
主内容先于整页源码,结构先于样式,链接和图片要在目标站点验证;转换后再做安全清洗、版权确认和 Markdown 预览。这样迁移得到的是可维护文档,而不是一份难以追踪的网页快照。