第 4 课

常见 HTML Entity 错误

避免双重编码、把解码当净化、以及空白字符问题。

实体相关 bug 常表现为「页面上字符不对」,根因往往是流水线顺序或不可见字符。

双重编码

对已转义内容再编码最常见。表现:

  • 用户看到 © 而不是 ©
  • 全文搜索能搜到渲染文本里的字面量 <

务必分清输入是 原始用户文本 还是 已转义存储

把解码当净化

解码 &lt;script&gt;alert(1)&lt;/script&gt; 会得到文本 <script>alert(1)</script>——但若不经净化就插入 HTML,渲染器仍可能执行脚本。

解码用于查看与编辑;渲染不可信 HTML 前须单独净化。

混淆空格与 nbsp

&nbsp;不换行空格(U+00A0),与普通空格(U+0020)不同。混用时布局、复制粘贴和字符串比较会静默失败。

调试时应用能可视化 nbsp 与 Tab 的预览。

过度转义

HTML 里转义 < 是必要的;把每个 ASCII 字母都转义只会让 CMS 不可读并破坏搜索。按输出格式要求转义即可,不要「为了安全而全转义」。

无效数字实体

&#9999999; 或不完整的 &#xZZ; 应在批量处理时明确报错,而不是静默原样输出。

想动手练习时,可使用 DevCove 相关工具——可选,不属于本课正文。

打开相关工具

返回课程概览