E2.18.4predictable rich-text downgrade设计
复杂格式在纯文本场景下需要可预测的降级方式
别名: 富文本转纯文本 · markdown fallback · 标题变成星星
概念解释
同一段话会离开富文本,走进短信、日志、搜索索引、不支持 HTML 的终端。标题、列表、链接、表格在那一头必须变成某种纯文本,否则要么标签裸奔,要么结构蒸发。可预测的降级(predictable rich-text downgrade)要求每一种结构都有事先说清的纯文本形状:标题前面加谁、链接是「文字 + 网址」还是只留文字、表格怎么摊平。它管的是出富文本之后长什么样,不是编辑时内容和样式是否纠缠,也不是贴进来脏不脏。
机制
降级是一次有损映射。没有约定时,每个出口自己猜:有的把 <h2> 变成 ##,有的变成全大写,有的直接丢掉。作者在编辑器里看见的层次,到了邮件纯文本部分对不上,回复的人会误解结构。链接若只剩锚文字,网址丢失;只剩网址,可读性丢失。列表若变成一段逗号分隔,条目边界消失。可预测性让作者在写作时就能预见到「这条会变成什么」,并避免依赖降级后不存在的手段(颜色、底纹)。
边界
出口仍是完整 HTML/PDF 时,不必降级,硬转纯文本才是损失。用户主动「复制为纯文本」是同一映射,应与自动出口共用一张表,避免两条规则。双向编辑(纯文本里改了再开富文本)若不能无损回来,降级就应被标成单向,不要假装往返。代码块、公式没有诚实的纯文本等价物,应显式变成「见原文」或占位,而不是乱码。
怎么落地
- 为标题、列表、链接、强调、表格各写一条降级规则,并在「纯文本预览」里给作者看。
- 让通知、日志、搜索摘要共用这张规则,不要每个管道自己剥标签。
- 对没有诚实等价物的结构,用明确占位,而不是静默删除。
- 验证:写一篇含标题、列表、链接的短文,分别看短信、纯文本邮件、日志里的样子。三次形状不一致,或作者看到的层次对不上出口,降级就还不可预测。再改一处纯文本,看富文本是否被悄悄损坏。