渲染预览(下方内容按 HTML 真实渲染,用于确认转义是否正确)
它如何工作
转义时用字符替换把 &、<、> 换成实体,顺序上必须先处理 &,否则会把刚生成的 < 再次转义成 &lt;——这是手写转义最常见的错误,顺序错了整段输出就全废。
反转义采用双阶段:先识别 ' 这类数字实体并按十进制/十六进制还原成对应码点,再处理 这类命名实体。不使用 innerHTML 直接赋值——那样会把内容里的 <script> 一并执行,存在 XSS 风险。
「提取纯文本」先用 DOMParser 把 HTML 解析成文档树(DOMParser 不会执行脚本),再取 textContent,因此结果干净且安全。
常用实体对照
| 字符 | 命名实体 | 数字实体 | 说明 |
|---|---|---|---|
& | & | & | 与号,必须最先转义 |
< | < | < | 左尖括号,防止被当作标签起始 |
> | > | > | 右尖括号 |
" | " | " | 双引号,属性值内必须转义 |
' | ' | ' | 单引号,HTML5 起才支持命名写法 |
| 空格 | |   | 不换行空格,不是普通空格 |
常见问题
转义后再反转义,能完全还原吗?
对标准实体可以。但要注意 还原后得到的是 U+00A0(不换行空格),它看起来像空格但不是,在代码里比较字符串时会不相等——这是排版复制粘贴后排查不出问题的常见原因。
为什么转义要勾选引号?
只有在把内容放进 HTML 属性值(如 title="...")时才需要转义引号。放在元素文本内容里的话,转义引号反而会让页面上真的显示出 " 这种字符。
「提取纯文本」和「去除标签」有什么区别?
前者会解析实体、保留文字语义(例如 < 会变成真正的 < 字符);后者只是按正则粗暴地删掉尖括号之间的内容,速度快但遇到不规则 HTML 容易出错。推荐用前者。