CSDN 已发布文章切换 Markdown 编辑器
场景
之前在 csdn 发布的文章不是用 markdown 编辑器,想切换 markdown 编辑器,但不想丢失之前的数据。
解决方法
- 首先打开自己的文章,在链接中找到文章的 ID 如 :https://blog.csdn.net/weixin_40013817/article/details/103182967?spm=1001.2014.3001.5502
- 上述的文章
id为103182967 - 接着将文章
id拼接到此链接的最后:https://editor.csdn.net/md/?articleId=103182967 - 打开链接重新编辑即可
为什么这样能行
CSDN 的编辑器有两套,对应两个不同的路由:
- 富文本编辑器:
https://editor.csdn.net/?articleId=xxx - Markdown 编辑器:
https://editor.csdn.net/md/?articleId=xxx
区别就是路径里多了个 /md/。文章数据(标题、正文、标签、分类)存在同一个地方,编辑器只是不同的前端界面。你从文章详情页点「编辑」时,CSDN 会根据这篇文章创建时用的编辑器类型,自动跳到对应的路由。
手动改 URL 加上 /md/,相当于强制用 Markdown 编辑器去加载同一篇文章。这不是漏洞,就是它的路由设计。
文章 ID 的位置:详情页 URL 里 article/details/ 后面那串数字。
https://blog.csdn.net/weixin_40013817/article/details/103182967?spm=1001.2014.3001.5502
^^^^^^^^^ 这就是 ID
后面 ?spm= 那一堆是 CSDN 的来源追踪参数,跟文章无关,拼 URL 时不用带。
内容会怎么变化
这一步是有损的,得提前知道会丢什么。
富文本编辑器存的是 HTML,Markdown 编辑器需要的是 Markdown 源码。用 Markdown 编辑器打开一篇 HTML 内容的文章时,CSDN 会做一次 HTML → Markdown 的转换。这个转换只能覆盖有对应 Markdown 语法的结构:
能正确转换的:
- 标题(
<h1>~<h6>→#~######) - 段落、加粗、斜体
- 无序/有序列表
- 链接和图片
- 代码块(如果原来用的是
<pre><code>) - 引用块
会丢失或变形的:
- 行内样式。富文本编辑器里手动设的字体颜色、字号、背景色(都是
style属性),Markdown 没有对应语法,要么被丢掉要么变成裸的 HTML 标签留在 Markdown 里。 - 复杂表格。带合并单元格(
colspan/rowspan)的表格没法用 Markdown 表示,会退化成一堆 HTML。 - 居中、缩进等排版。
<center>、text-align之类的都没了。 - 代码块的语言标注。富文本里代码块可能没有语言信息,转换后变成没有高亮的裸代码块,需要手动补
```javascript这样的语言标识。 - 嵌套结构。深层嵌套的列表里套表格、表格里套代码块这类,转换结果通常需要手工修。
所以这个操作的正确姿势是:先备份,再转换,然后逐段检查。
备份的具体做法
在改动之前,把原文完整存一份。三个层次,建议都做:
1. 存 HTML 源码。在富文本编辑器里 F12,找到编辑区的 DOM 节点,在控制台里导出:
// 选中编辑区元素后(Elements 面板里点一下),$0 就指向它
copy($0.innerHTML);
copy() 是 DevTools 的便利函数,把参数复制进系统剪贴板。然后粘到本地文件里存好。
2. 存渲染后的效果。直接把文章详情页保存成 PDF(Command/Ctrl + P → 另存为 PDF)。这一份用来对照转换后的排版有没有变化,比对着 HTML 源码看直观得多。
3. 用 CSDN 的历史版本。编辑器里有草稿/历史版本功能,但我不建议依赖它——不同时期的行为不一致,而且切换编辑器这个操作本身可能不产生历史记录。自己存的那份才是可靠的。
转换后必须检查的几处
打开 Markdown 编辑器之后,按这个顺序过一遍:
代码块。这是技术文章最重要的部分,也是最容易转坏的。检查两件事:一是代码有没有丢行(尤其是空行和缩进);二是有没有语言标注,没有的话补上,不然没有语法高亮。
图片链接。CSDN 的图片链接会被替换成它自己的 CDN 地址,带防盗链参数。转换后确认每张图都还能显示。挂掉的话去历史版本或者你存的 HTML 里找回原链接。
特殊字符的转义。Markdown 里有一批字符有语法含义(*、_、`、#、[、]、|),如果正文里本来就有这些字符(比如讲正则、讲通配符的文章),转换后可能被当成语法解析,导致排版乱。需要手动加反斜杠转义:
这是一个 \* 星号,不是斜体标记
表格里的竖线要写成 \|
数学公式。如果原文用了 CSDN 的公式功能,转换后应该变成 $...$ 或 $...$ 的 LaTeX 语法,确认渲染正常。
目录(TOC)。富文本编辑器和 Markdown 编辑器生成目录的机制不同,原来手动写的目录锚点链接大概率失效。Markdown 编辑器里用 @[toc] 让它自动生成即可。
保存前的注意事项
先预览再保存。Markdown 编辑器右侧是实时预览,但预览的样式和文章详情页的样式不完全一致(详情页有 CSDN 自己的一套 CSS)。所以保存后还要去详情页再看一遍。
保存之后这篇文章的编辑器类型就永久变了。之后从详情页点「编辑」会默认进 Markdown 编辑器。想切回富文本,理论上把 URL 里的 /md/ 去掉能进富文本编辑器,但那时候内容已经是 Markdown 源码了,用富文本编辑器打开会看到一堆 #、** 这样的原始标记——转回去是有损的,而且比转过来更难看。所以这个决定要提前想清楚,尽量一次做对。
批量处理。如果有几十篇要转,可以先把所有文章 ID 收集出来。在自己的博客列表页(https://blog.csdn.net/你的用户名?type=blog)的控制台里跑:
// 提取当前页面上所有文章链接里的 ID
const ids = [...document.querySelectorAll('a[href*="/article/details/"]')]
.map(a => a.href.match(/details\/(\d+)/)?.[1])
.filter(Boolean);
console.log([...new Set(ids)].join('\n'));
new Set 去重,因为同一篇文章的标题和「阅读更多」可能都是链接。拿到 ID 列表后逐个拼 URL 处理。
注意不要写脚本自动打开几十个标签页,一是浏览器吃不消,二是密集访问可能触发风控。手动一篇篇来,或者一次开五六个。
更根本的建议
写到这里说句实在话:这类操作的存在本身说明了平台写作的一个问题——你的内容格式由平台决定,迁移和批量修改都要跟它的界面较劲。
我后来的做法是:内容的真源放在本地的 Markdown 文件里,用 git 管理,平台只是发布渠道。这样带来几个直接的好处:
- 批量修改就是普通的文件操作,
sed或者编辑器的全局替换,几秒钟完成且有 diff 可看 - 格式永远是 Markdown,不存在编辑器类型的概念
- 平台改版、限流、甚至关停都不影响内容资产
- 可以同时发到多个平台,源文件只维护一份
具体的操作是本地写 Markdown,发布时粘贴到各平台的 Markdown 编辑器里。有些平台(掘金、知乎)支持直接导入 Markdown 文件,CSDN 的 Markdown 编辑器也支持粘贴 Markdown 源码。
如果你已经在平台上积累了不少文章,把它们导出来的成本是一次性的,值得付。导出的思路和上面提取 ID 一样——拿到 ID 列表,逐篇打开 Markdown 编辑器,把源码复制出来存成文件。这个过程虽然琐碎,但做完之后内容就完全在自己手里了。

还没有留言,来发表第一条吧~