第 3 课
CMS 与模板中的实体
文本节点、属性值与导出字段何时需要转义。
CMS 与模板引擎常会自动转义内容——但未必在你期望的那一层发生。
文本节点 vs 属性
HTML 文本节点通常必须转义 <、>、&。
属性值 里若使用 " 或 ' 作为定界符,属性内部的引号也需要转义。例如 title="He said "hi"" 会破坏属性结构,除非引号被编码。
双重编码陷阱
典型错误链:
- CMS 存的是
Tom & Jerry(已转义) - 模板引擎再转义一次 →
Tom &amp; Jerry - 页面上显示字面量
&而不是&
修复原则:在不可信文本进入 HTML 的边界只转义一次。若数据已实体化,下次转义前应先解码或标记为已安全。
富文本 vs 纯文本字段
富文本编辑器可能输出已含实体的 HTML 片段;纯文本字段则常在输出时整段转义。两种字段混在同一流水线里会导致展示不一致。
邮件与导出格式
CSV、JSON API、邮件模板常因 XML/HTML 兼容而实体化。导入网页前需确认下游期望的是原始文本还是已转义 HTML。
框架自动转义
React、Vue 等在使用文本插值 API 时默认转义。手动 dangerouslySetInnerHTML 或原始模板块会绕过这层保护——实体与净化需自行负责。