必须用字符实体转义,因为直接写<和>会被浏览器解析为HTML标签,导致内容丢失、布局错乱或XSS风险;<和>最通用安全,严格区分大小写,所有浏览器都支持,用户输入等动态内容须在插入DOM前转义。

直接在 HTML 里写 或 <code>>,浏览器会当成标签解析,导致内容消失、布局错乱,甚至引发 XSS 风险。必须用字符实体转义。
为什么不能直接写 和 <code>>
HTML 解析器遇到 就开始找匹配的 <code>> 构成标签,中间内容若不符合标签语法,可能被静默丢弃或触发错误渲染。比如这段代码:
<p>5 < 10 and 10 > 3</p>
如果不转义,5 3 会被解析为:5 (截断)、and 10 (再截断),最终页面只显示“5 and 10”。
将调研报告、方案对比、数据分析、需求梳理、会议纪要、设计说明、代码评审、学习笔记等任务产物输出为可在浏览器直接打开的单文件 HTML,替代 Markdown 作为最终交付物。Markdown 在信息密度、视觉清晰度和可分享性上已跟不上 AI 产物的丰富度,HTML 能同时承载排版、表格、SVG 等。
- 实体名
<和>是最通用、最安全的选择 - 实体编号
和 <code>>兼容性更好,但可读性差 - 别用
<或>(缺分号)——多数浏览器会容错,但 W3C 标准不合法,某些严格模式(如 XML、XHTML)直接报错
< 与 > 的拼写和大小写敏感问题
实体名称严格区分大小写:< 有效,< 或 < 无效;> 有效,> 不行。
-
lt= less than,gt= greater than —— 记住首字母缩写即可 - 别和数学符号混淆:不是
<t;或&ggt;,没有重复字母 - IE 旧版不支持
',但<和>所有浏览器都支持
在模板、JS 字符串、后端输出中如何安全插入
前端模板(如 Vue/React)通常自动转义,但手动拼接 HTML 字符串时极易翻车;后端(PHP/Python/Node)若直接 echo 或 res.send 原始字符串,也必须提前转义。
- 纯 HTML 文件:直接写
<和> - JS 字符串中拼接 HTML:
element.innerHTML = "x < y && y > z";(注意还要转义&为&) - PHP 中用
htmlspecialchars($str, ENT_NOQUOTES, 'UTF-8'),它默认处理、<code>>、&,但不处理单双引号(ENT_NOQUOTES) - 避免手写正则替换
/g →>,容易漏掉嵌套或干扰已有实体
真正容易被忽略的是:当内容来自用户输入、数据库或 API 响应时,< 和 > 必须作为「最后一步」在插入 DOM 前完成转义——早了可能被二次编码,晚了就已执行恶意脚本。

















