<和>的作用是将<、>作为普通文本显示,防止被浏览器解析为HTML标签,避免解析错误、XSS攻击及XML/SVG等格式解析失败;替换顺序必须先&后<再>,否则引发连锁转义错误。

< 和 > 的作用很直接:让浏览器把 当成普通文本显示,而不是去解析成 HTML 标签。不转义时,5 可能导致解析器卡在 5 < 3 就能稳稳渲染出来。
什么时候必须用 < 和 >?
不是所有场景都强制要求,但以下情况不转义大概率出问题:
- 在 HTML 文本节点中直接写数学比较、Shell 命令、正则表达式等含 的内容,比如
<p>x < y && z > 0</p> - 展示 HTML/JS/XML 代码片段时,例如想显示
<div id="app">,不转义就会被当成真实标签提前闭合或嵌套错乱 - 输出用户输入内容(如评论、表单回显)——这是 XSS 防御的基本动作,
<script>alert(1)</script>必须变成<script>alert(1)</script> - 生成 XML、SVG、RSS 或 XHTML 内容时,
>虽在 HTML5 中常可省略,但在这些格式里不转义会直接报解析错误
< 和 > 的替换顺序会影响结果吗?
会影响,尤其在涉及 & 的时候。HTML 实体以 & 开头、; 结尾,如果先替换 > 再替换 &,可能把刚生成的 > 里的 & 又误替一次。正确顺序是:
立即学习“前端免费学习笔记(深入)”;
- 先替换
&→& - 再替换
<→ - 最后替换
>→>
JavaScript 示例中常见错误就是没按这个顺序:.replace(/, "<").replace(/&/g, "&") 会导致 < 变成 ,多了一层转义。
用 textContent 还是手动转义?
取决于你控制输出的位置:
- 往
element.textContent赋值时,浏览器自动跳过 HTML 解析,会原样显示,无需手动转义 —— 但这也意味着你无法在里面写任何 HTML 标签 - 往
element.innerHTML赋值时,浏览器会解析 HTML,此时必须提前对用户数据调用转义函数,否则风险自担 - 服务端模板(如 EJS、Jinja2)通常自带转义开关,比如
默认转义,不转义,别无脑关掉
最易忽略的一点:前后端转义逻辑要对齐。后端用了 htmlspecialchars($str, ENT_QUOTES),前端又用 JS 再转一次,就可能出现 这种双重编码,显示为字面量 <code>< 而不是 。



















