首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >同一篇 Markdown 发到八个平台,我数出了八种损坏方式

同一篇 Markdown 发到八个平台,我数出了八种损坏方式

原创
作者头像
用户6170966
发布2026-08-30 17:11:47
发布2026-08-30 17:11:47
860
举报

先给结论:不存在「一次写好,到处能发」。同一份 Markdown 源码,八个平台会用八种不同的方式接收它,其中至少三种会静默损坏内容——不报错、不提示,发出去之后你自己看才发现表格没了。

这篇把八个平台的实际行为列出来,包括每一种的判别方法。写给需要一稿多投的人。


一、最该先知道的:三种静默损坏

「静默」是关键词。报错的问题不可怕,可怕的是提交成功、页面正常、内容坏了。

1.1 表格被整个吞掉,单元格文字一并丢失

某平台的写草稿接口会把 <table> 整个剥离,连单元格里的文字都不保留,接口返回 200,一切看起来正常。

隔离实验最能说明问题——写入这段:

代码语言:html
复制
<p>前</p><table><thead><tr><th>列A</th></tr></thead>
<tbody><tr><td>甲</td></tr></tbody></table><p>后</p>

读回来是:

代码语言:html
复制
<p>前</p><p>后</p>

表格连同「列A」「甲」这两个词一起消失了。 如果你的文章靠表格承载对比信息,等于内容被删了一块,而你完全不会收到通知。

同一个平台的浏览器路径(走富文本编辑器粘贴)却能完整保留表格。所以这不是平台不支持表格,是那条接口的行为。

判别方法:发完之后把正文读回来,数 <table> 的个数,和原文对比。别只看「提交成功」。

1.2 表格被压成一整段纯文本

另一个平台的编辑器基于 Tiptap,没开表格扩展。粘进去的表格不会消失,但会变成这样:

代码语言:bash
复制
现象 先查什么 而不是 脚本403、curl200 客户端User-Agent 换key 403body是纯文本 CDN/WAF 鉴权配置

所有单元格首尾相接挤成一行,完全不可读。比直接删掉更糟——内容还在,但传达不了任何信息,而且你从字数统计上看不出异常。

→ 这个平台只能发本来就没有表格的短文,不能复用技术长文。

1.3 代码块语言标注:不标不让发,标错也不让发

某平台在提交时会检查所有代码块是否标注了语言,没标就拒绝,提示写着:

代码语言:bash
复制
文中第12处代码块未设置语言,请补全后再操作

两个坑叠在这里:

第一,它把闭合标记也算作「一处」。 我的文章里第 12 个 ``` 标记是第 6 个代码块的闭合行,按它的编号根本找不到问题在哪。实际出问题的是第 12 个开始标记。

第二,它的提示自己写着支持 ```text,但实测不认。 提示原文是「补法:bash /json / http /text」,而我用 ```text 标注的那块正是它报错的那块。换成 ```bash 就过了。

提示信息本身也可能是错的,别把它当规格文档。


二、五种编辑器内核,五种填充策略

平台之间最根本的差异在这里——同样是「把文章内容放进去」,五个内核要求的输入格式互不兼容

内核

典型平台

要喂什么

喂错了会怎样

Draft.js

富文本编辑器

剪贴板 text/html

只给 text/plain 会让标签变成字面文本

ProseMirror / Tiptap

富文本编辑器

剪贴板 text/html

同上

CodeMirror 5

Markdown 源码编辑器

md 源码(纯文本)

喂 HTML 会原样显示标签

<textarea>

Markdown 源码编辑器

md 源码,可直接 fill()

——

自研 md 编辑器

Markdown 源码编辑器

md 源码

——

方向是相反的:富文本编辑器要 HTML,Markdown 编辑器要 md 源码。把前者的策略搬到后者上,你会看到满屏 <p> 标签。

关于 CodeMirror 的一个坑

CodeMirror 5 有视口虚拟化——它只渲染可见的那几十行。所以:

代码语言:javascript
复制
document.querySelector('.CodeMirror-code').innerText   // ❌ 长文会少一大半
document.querySelector('.CodeMirror').CodeMirror.getValue()   // ✅ 完整内容

如果你用前者做「内容完整性校验」,长文会假报失败,而你会以为是粘贴出了问题。


三、标题长度:八个平台差了三倍多

这一项最容易在最后一步卡住。

平台类型

标题上限

备注

内容推荐类

2~30 字

全表最严

技术社区 A

80 字

技术社区 B

5~100 字

下限,太短也不让发

长文平台

64 字

图文笔记

长文标题 64 字,笔记标题另算

见下

一篇 40 字的标题,在多数平台没问题,到 30 字上限那个平台直接卡住。所以一稿多投时,标题需要单独准备一个短版

关于「另算」那一项

有个平台的长文标题限 64 字,但发布时还有一个笔记标题字段,上限严得多。

我原本按流传的说法当它是 20 字,结果实测 23 字完整保留了。

→ 所以我改成了不在本地猜上限,填进去再回读比对

代码语言:python
复制
page.locator(TITLE_SEL).fill(title)
got = page.input_value(TITLE_SEL)
if got.strip() != title.strip():
    print(f"🔴 被截断:给了 {len(title)} 字,只留下 {len(got)} 字 → {got!r}")

让平台自己告诉你截到哪,比查文档可靠——文档和实现经常对不上(见前面那个 ```text 的例子)。


四、其他会咬人的差异

摘要取自哪里。 有的平台发布面板里没有摘要栏,meta description 直接取正文第一段。所以第一段不能浪费在「本文所有数据均为实测」这类免责声明上——第一段就要给结论

正文要不要留 H1。 标题栏已经有标题了,正文再来一个 # 标题 是格式冲突,有平台会因此驳回。发之前 tail -n +2 去掉第一行。

必填项各不相同。 有的必填标签、有的必填分类、有的必填封面(可以选「无封面」但必须显式选),还有的三者都要。

标签是不是受控词表。 有的平台只能从下拉选已有的,不能自创;有的低等级账号不允许创建自定义标签,只能点选平台推荐的。


五、我最后是怎么组织的

结论是放弃「一份稿子通吃」,改成一份主稿 + 几个按平台特性生成的变体:

代码语言:bash
复制
主稿(内容最完整)
 ├── 去表格版      → 表格会被压成纯文本的平台
 ├── 短标题版      → 标题限 30 字的平台
 └── 去外链版      → 对推广元素敏感的平台

变体不是手工改,是脚本从主稿生成的——这样主稿改了,变体跟着一致。

然后每个平台发布前跑一遍针对性的机械校验

代码语言:python
复制
# 代码块语言标注(有的平台强制)
marks = re.findall(r'^```(\w*)', text, re.M)
bad = [b for b in marks[0::2] if not b]     # 只看开始标记,别数闭合标记

# 标题长度
if not 2 <= len(title) <= LIMIT: ...

# 表格数量(发完回读时对比)
n_tables = html.count('<table')

这些检查不到十行,但每一条都对应一次实际踩过的坑。


小结

症状

原因

判别方法

表格整个不见了

接口剥离了 <table>

发后回读,数 <table> 个数

表格变成一长串文字

编辑器没开表格扩展

看渲染效果,不能只看字数

提示「第 N 处代码块未设置语言」

它把闭合标记也算一处

开始标记,别数总数

标注了语言还是被拒

平台不认某些语言标识

换成 bash 这类最通用的

长文校验说内容不完整

CodeMirror 视口虚拟化

用实例 API 读,别读 DOM 文本

标题填进去少了一截

各平台上限差三倍

填完回读比对,别猜上限

一句话:「提交成功」和「内容正确」是两件事,中间隔着一次回读。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

目录
  • 一、最该先知道的:三种静默损坏
    • 1.1 表格被整个吞掉,单元格文字一并丢失
    • 1.2 表格被压成一整段纯文本
    • 1.3 代码块语言标注:不标不让发,标错也不让发
  • 二、五种编辑器内核,五种填充策略
    • 关于 CodeMirror 的一个坑
  • 三、标题长度:八个平台差了三倍多
    • 关于「另算」那一项
  • 四、其他会咬人的差异
  • 五、我最后是怎么组织的
  • 小结
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档