知乎 Markdown 发布器
一个桌面版 VS Code 扩展:在本地 Markdown 与知乎文章之间双向同步。它可以把当前 .md / .markdown 文件发布或覆写为知乎文章,也可以把已发表文章连同图片载入本地;发布标题严格取文件名(不含扩展名)。
本扩展是独立的第三方项目,与知乎官方没有隶属、授权或背书关系。扩展使用知乎当前网页内部接口,接口或风控规则变化可能导致部分功能暂时失效。
核心能力
- 文件
这是标题.md 的知乎标题固定为“这是标题”。
- 标题层级自动适配知乎:
# 发布为一级标题,## 到 ###### 统一发布为二级标题。
- 默认开启知乎文章目录,并在草稿与最终发布时保持同一目录设置。
- 发布前把普通 Markdown 软换行折叠为空格,并移除块标签之间仅供 HTML 排版的换行和列表单段落包装,避免知乎产生原文没有的空行;显式硬换行、代码块和公式内部换行保持不变。
- 可把已发表文章载入为
文章标题/文章标题.md,图片下载到 文章标题/image/001.png、002.jpg…;同源图片只下载一次。
- 读取文章触发知乎 HTTP 403/安全验证时,可在扩展专用浏览器完成验证,验证成功后自动继续载入。
- 可粘贴已发表文章链接或 ID,用当前 Markdown 的文件名、正文和引用图片直接覆写该文章;覆写前会校验编辑权限并再次确认。
- 自动解析 Markdown 图片、引用式 Markdown 图片,以及正文中的
<img src>、srcset 和 <picture><source srcset>。
- 本地相对路径、绝对路径、
file://、base64 data URI 都会上传到知乎图床。
- 远程
http(s) 图片默认保留原链接,也可显式设置为下载后转存到知乎图床。
- 支持 PNG、JPEG、WebP 和 GIF;GIF 使用知乎当前的 OSS 分片上传流程。
- 任一应上传图片缺失或上传失败时立即中止,不会把带有本地路径的正文交给知乎。
- 可先保存草稿验证排版,也可在明确确认后直接发表。
- Cookie 存入 VS Code
SecretStorage;浏览器登录使用隔离的临时配置目录,不读取日常 Chrome/Edge 配置,并在导入 Cookie 后立即删除临时目录。
- 知乎文章 ID 全程以字符串处理,兼容超过 JavaScript 安全整数范围的 19 位 ID。
安装
在 VS Code 中打开“扩展”视图,搜索 @id:Semi-Observer.zhihu-markdown-publisher,然后点击“安装”。
如需离线安装,可点击扩展视图右上角 ...,选择“从 VSIX 安装...”,再选择下载的 .vsix 文件。安装完成后按提示重新加载 VS Code。
扩展运行在本机 UI 侧,需要本机安装 Chrome 或 Edge。它不会把浏览器下载进 VSIX。
第一次使用
- 按
Ctrl+Shift+P 打开命令面板,执行“知乎发布:登录”。
- 在弹出的扩展专用 Chrome/Edge 中扫码并完成可能出现的验证码。看到 VS Code 提示“知乎登录成功”后即可关闭提示。
- 打开并保存一个 Markdown 文件。
- 建议先执行“知乎发布:检查当前 Markdown 图片”。
- 首次建议执行“知乎发布:保存当前 Markdown 为草稿”,在知乎编辑器中检查格式。
- 确认无误后执行“知乎发布:发表当前 Markdown”。首次发表时输入至少一个话题关键词;更新已关联文章时不主动增删原话题,也不再重复绑定。最后在确认框中确认操作。
也可以点击 VS Code 底部状态栏的“发布到知乎”直接进入发表流程。
载入与覆写已发表文章
载入文章:
- 执行“知乎发布:载入已发表文章到本地”。
- 粘贴
https://zhuanlan.zhihu.com/p/<文章ID> 或纯数字文章 ID,并选择一个本机父文件夹。
- 确认后,扩展创建
文章标题/文章标题.md;正文图片按首次出现顺序保存到 image/001.ext、002.ext…,重复来源复用同一文件。
- 如果同名目录已经存在,扩展创建
文章标题 (2)/文章标题 (2).md 等同名目录与文件,不覆盖原文件夹。任一图片下载或格式校验失败时,整次导入中止并清理临时目录。
如果知乎返回 HTTP 403 或跳转到安全验证,选择“打开浏览器验证”,在弹出的扩展专用 Chrome/Edge 中完成验证;验证后如未自动返回文章页,请刷新该文章页。扩展确认目标文章数据后会自动关闭窗口、更新安全存储中的 Cookie,并从原步骤继续载入。
导入会恢复常见标题、段落、链接、列表、引用、代码、表格、图片及知乎公式。由于知乎正文只保留有限标题层级,已被知乎压平的原始三级及更深标题无法恢复。
当扩展能确认文章作者就是当前登录账号,且知乎标题无需因 Windows 文件名规则而调整时,导入文件会与原文章自动关联;随后执行“发表当前 Markdown”即可更新原文章。否则只导入文件,需要更新时使用“知乎发布:用当前 Markdown 覆写已发表文章”。
覆写文章:
- 打开并保存作为新内容的 Markdown。
- 执行“知乎发布:用当前 Markdown 覆写已发表文章”,粘贴目标文章链接或 ID。
- 扩展先读取目标编辑草稿以验证权限;没有有效登录信息时会直接打开专用登录窗口,登录成功后继续本次操作。若文章页或编辑接口要求安全验证,确认后会打开目标编辑页完成验证,再自动继续。
- 权限确认后,模态确认框会同时显示原知乎标题、目标 ID、覆写后的文件名标题和图片数量。
- 确认后,扩展先上传当前 Markdown 引用的图片,再替换标题和正文并重新提交已发表文章;接口返回成功后,还会回读公开页核对文章 ID、标题、正文结构、链接、代码、公式和图片序列。若公开页尚未呈现本次内容,扩展会要求人工核对,而不会提示覆写成功。
覆写不会创建线上内容备份。知乎没有公开稳定的文章更新 API,当前接口也没有可靠返回原专栏、评论权限、创作声明和赞赏等完整发布元数据;目录由 zhihuMarkdownPublisher.tableOfContents 控制并默认开启,其他设置重新提交时可能按插件默认值变化。确认覆写前请自行保留原文,完成后到知乎编辑器检查上述设置。
图片路径示例
以下写法均受支持:





相对路径以当前 Markdown 文件所在目录为基准。为避免意外读取敏感文件,本地图片的真实路径必须位于当前 VS Code 工作区内(未打开工作区时必须位于 Markdown 所在目录内),UNC/网络共享路径和工作区内的符号链接/目录联接图片始终拒绝。发布前,命令会显示待上传的本地、内嵌和远程图片数量;相同图片在一篇文章中只上传一次。
默认设置 zhihuMarkdownPublisher.remoteImages 为 keep,本地和内嵌图片仍会全部上传。若希望远程图片也转存,可改成 rehost;该模式会拒绝 localhost、局域网、链路本地和云元数据等非公网地址,逐跳检查最多 5 次重定向,并在下载过程中执行体积上限。
命令
| 命令 |
用途 |
| 知乎发布:登录 |
用扩展专用 Chrome/Edge 登录,并保留 Cookie 原始作用域 |
| 知乎发布:退出登录 |
删除 SecretStorage 中的 Cookie,并清理可能残留的临时浏览器配置 |
| 知乎发布:清除本扩展本地数据 |
删除 Cookie、草稿关联记录和专用浏览器配置,并清空当前输出面板;不删除知乎上的内容 |
| 知乎发布:检查当前 Markdown 图片 |
检查本地图片是否存在,并统计各种图片 |
| 知乎发布:保存当前 Markdown 为草稿 |
上传图片、创建或更新知乎草稿,不公开发表 |
| 知乎发布:发表当前 Markdown |
上传图片并公开发表;首次发表绑定话题,重复执行不主动增删话题并更新已关联文章 |
| 知乎发布:用当前 Markdown 覆写已发表文章 |
校验目标编辑权限后,用当前文件名、正文和图片直接替换指定文章 |
| 知乎发布:载入已发表文章到本地 |
创建标题目录和同名 Markdown,图片保存到 image 子文件夹并顺序编号 |
设置
| 设置 |
默认值 |
说明 |
zhihuMarkdownPublisher.stripLeadingH1 |
false |
默认保留 # 并发布为一级标题;设为 true 时移除正文开头的第一个一级标题 |
zhihuMarkdownPublisher.tableOfContents |
true |
默认开启知乎文章目录;关闭后草稿与最终发布都会同步关闭目录 |
zhihuMarkdownPublisher.remoteImages |
keep |
rehost 转存远程图片;keep 保留原 URL |
zhihuMarkdownPublisher.maxImageSizeMB |
20 |
单张待上传图片的体积上限 |
zhihuMarkdownPublisher.defaultTopics |
[] |
首次直接发表时自动匹配的话题关键词;留空则首次发表时询问 |
zhihuMarkdownPublisher.openAfterPublish |
true |
完成后未选择按钮时自动打开文章或草稿 |
zhihuMarkdownPublisher.browserChannel |
auto |
登录与安全验证浏览器:依次尝试 Chrome、Edge,或固定其中一个 |
隐私说明
生效日期:2026 年 8 月 17 日。
- 处理的数据:扩展只在完成用户发起的登录、文章载入、图片检查、保存草稿、覆写或发表操作时处理数据,包括知乎登录 Cookie、知乎文章 ID/标题/正文、Markdown 文件名与正文、正文引用的图片及 URL,以及本地文件与知乎草稿/文章之间的关联记录。
- 数据用途与接收方:Cookie 仅用于向
zhihu.com 域名下的登录校验、文章读取、文章和图片接口发起已认证请求;发布或覆写时,文章标题、正文、话题和待上传图片会发送给知乎及其 zhimg.com 图片存储服务。载入时,扩展从知乎文章页读取正文,并从正文指定的公网图片主机及其最多 5 跳重定向目标下载图片到用户选择的本机文件夹;这些图片主机可能接收到用户的网络地址和常规 HTTP 请求信息。选择 rehost 发布远程图片时也会发生同类下载。
- 本机存储:知乎 Cookie 保存在 VS Code
SecretStorage;草稿关联记录保存在 VS Code 扩展全局状态中,内容为本地文档 URI、标题、内容哈希、知乎草稿/文章 ID、状态和更新时间。载入的 Markdown 与图片保存在用户明确选择的本机目录,由用户自行管理,“清除本扩展本地数据”不会删除这些文章文件。扩展专用浏览器目录仅用于交互式登录及用户主动确认的文章安全验证;验证时会把已保存、保留原作用域的知乎 Cookie 临时注入该隔离浏览器,采集更新后的 Cookie 后立即删除临时目录。运行日志写入本机 VS Code“输出”通道,可能包含本地路径和经过移除凭据、查询参数后的图片来源,但不记录 Cookie、OSS 临时密钥或原始接口响应;其底层会话日志由 VS Code 按自身保留策略管理。
- 开发者数据收集:本扩展不包含遥测、广告、分析服务或开发者运营的后端,不会把 Cookie、文章、图片、日志或使用统计发送给扩展发布者。
- 保留与删除:登录信息保留至用户执行“知乎发布:退出登录”或“知乎发布:清除本扩展本地数据”;草稿关联记录保留至用户执行“知乎发布:清除本扩展本地数据”。清除命令会删除 Cookie、草稿关联记录和扩展专用浏览器配置,并清空当前输出面板;VS Code 的底层会话日志仍由 VS Code 按其保留策略管理。该命令不会删除已发送至知乎的草稿、文章或图片,这些内容需由用户在知乎中管理。
- 用户选择:载入、保存草稿、覆写文章和公开发表是独立命令;载入、覆写和公开发表前都会显示确认框。载入只在用户选择的本机目录创建文件,不向第三方上传内容。远程图片默认保留原 URL,只有用户将
remoteImages 设置为 rehost 时才会下载并转存。
- 联系与更新:隐私问题可通过本扩展的 Visual Studio Marketplace 页面联系发布者
Semi-Observer。如数据处理方式发生变化,本说明会随扩展版本更新。
失败与安全策略
- 图片上传发生在草稿正文更新之前;上传失败时不会把
file:// 或本地磁盘路径写进文章。
- 草稿创建后若话题、发表接口或风控验证失败,扩展会保留草稿,并提供编辑链接。
- 成功取得草稿 ID 后会把同一文件与该草稿关联,后续执行优先更新已有草稿。
- 载入最多处理 200 张图片、100 MB 图片总量,并继续执行单图大小、重定向、DNS 与公网地址校验;现有同名目录不会被覆盖。
- 读取或覆写文章遇到明确的知乎 403、验证跳转或安全验证页面时,只在用户确认后打开隔离浏览器;载入必须精确解析目标文章,覆写还必须在浏览器与普通接口中重新通过目标编辑权限检查,才会进入最终确认。
- 覆写只允许通过目标文章编辑接口校验的账号执行,并有不可撤销警告;由于接口不返回完整发布元数据,覆写后应检查专栏、评论、创作声明、目录和赞赏设置。
- 日志会写入“输出 → 知乎 Markdown 发布器”,不会输出 Cookie、OSS 临时密钥或原始接口响应;远程 URL 会移除账号信息、查询参数和片段后再记录。
- 知乎没有面向此用途的稳定公开发布 API。本扩展适配的是当前网页内部接口;知乎升级或账号触发风控时,可能需要重新登录,或打开已保留的草稿手动完成发布。
开源参考与许可证
本扩展为独立实现。为适配知乎当前网页接口和 VS Code 发布工作流,开发过程中参考了以下开源项目:
本项目采用 MIT 许可证。Markdown/HTML 渲染与转换器、解析器及其内联依赖的完整声明收录在扩展包内的 THIRD_PARTY_NOTICES.md;Playwright 的 LICENSE、NOTICE 和 ThirdPartyNotices.txt 原文件随 VSIX 一同分发。