◆

CSDN 已发布文章切换 Markdown 编辑器

2023-02-02 01:370

场景

之前在 csdn 发布的文章不是用 markdown 编辑器,想切换 markdown 编辑器,但不想丢失之前的数据。

解决方法

为什么这样能行

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 编辑器,把源码复制出来存成文件。这个过程虽然琐碎,但做完之后内容就完全在自己手里了。

💬留言板0

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

PAGE LOAD / LIVECSDN 已发布文章切换 Markdown 编辑器加载中