第 4 课
常见 HTML Entity 错误
避免双重编码、把解码当净化、以及空白字符问题。
实体相关 bug 常表现为「页面上字符不对」,根因往往是流水线顺序或不可见字符。
双重编码
对已转义内容再编码最常见。表现:
- 用户看到
©而不是 © - 全文搜索能搜到渲染文本里的字面量
<
务必分清输入是 原始用户文本 还是 已转义存储。
把解码当净化
解码 <script>alert(1)</script> 会得到文本 <script>alert(1)</script>——但若不经净化就插入 HTML,渲染器仍可能执行脚本。
解码用于查看与编辑;渲染不可信 HTML 前须单独净化。
混淆空格与 nbsp
是 不换行空格(U+00A0),与普通空格(U+0020)不同。混用时布局、复制粘贴和字符串比较会静默失败。
调试时应用能可视化 nbsp 与 Tab 的预览。
过度转义
HTML 里转义 < 是必要的;把每个 ASCII 字母都转义只会让 CMS 不可读并破坏搜索。按输出格式要求转义即可,不要「为了安全而全转义」。
无效数字实体
� 或不完整的 &#xZZ; 应在批量处理时明确报错,而不是静默原样输出。