五个 HTML 保留字符双向实时转义;反转义支持命名、十进制、十六进制三类实体。纯浏览器本地处理,数据不上传,断网也能用。
转义后的文本放入 HTML 文本节点与普通属性值是安全的;但 script、style、URL(href="javascript:…")、事件处理等上下文需要另外的防护策略,本工具不替代安全审计。
支持三类实体:命名实体(如 &、 、©)、十进制(©)、十六进制(©)。不认识的命名实体会原样保留、不吞字符;数字与十六进制实体支持全部合法 Unicode 码点。
网页里有一些字符被 HTML 语法本身占用,直接写出来会被浏览器当成代码解析,而不是当成文字显示。转义就是把它们替换成对应的「实体」写法。把文本粘贴进面板①,右侧的转义结果会实时更新:与号、小于号、大于号、双引号、单引号五个保留字符会被替换,其他字符原样保留。单引号的替换写法可以在下拉框里选:数字实体写法所有 HTML 版本都认识,是默认推荐;命名实体写法从 HTML5 才开始支持,更可读但老环境可能不认;如果你确定文本只会放进元素内容而不会进属性,也可以选择不转义单引号。
这五个字符构成了 HTML 实体转义的最小集合,缺一个都可能出显示错误或安全问题:
| 字符 | 转义后 | 为什么必须转义 |
|---|---|---|
| & | & | 实体的起始符。必须最先转义它,否则其余转义结果的与号会被浏览器二次解码,前功尽弃。 |
| < | < | 标签的开始。不转义的话,浏览器会把后面的文字当成新元素解析,页面结构直接被改写。 |
| > | > | 标签的结束。多数场景可以省略,但在一些解析容错和注释边界场景会出问题,规范建议转义。 |
| " | " | 双引号包裹的属性值的边界。把用户输入放进属性时必须转义,否则属性会被提前截断。 |
| ' | ' | 单引号包裹的属性值的边界。单引号属性同样会被它截断,数字实体写法兼容性最好。 |
反转义是相反的操作:把实体写法还原成真实字符,适合阅读爬虫结果、排查富文本存储数据、还原被转义过的 JSON 字符串值。把文本粘贴进面板②即可,三类实体都能解:命名实体按内置对照表(一百多个常用项,覆盖标点、货币、数学符号、希腊字母、拉丁字母变音等);十进制实体(© 这种写法)与十六进制实体(© 这种写法)按 Unicode 码点直接还原,覆盖全部合法码点。遇到对照表里没有的命名实体时,工具会原样保留它并在统计里注明数量,绝不静默吞字符——这比一些解码器直接丢掉要安全得多。
' 和 ' 有什么区别?两者都表示单引号。' 是数字实体,从 HTML 2.0 起所有版本都支持;' 是命名实体,HTML 4.01 里并不存在,HTML5 才正式引入(XML 一直有)。所以面向不确定的旧环境、邮件客户端或部分模板引擎时,推荐用 ';在确认是 HTML5 环境追求可读性时可以用 '。
HTML 转义和 URL 编码是一回事吗?不是,两者解决不同层面的问题、互不通用。HTML 转义处理的是「这段文本会被放进 HTML 文档」的场景,防的是标签与实体解析;URL 编码处理的是「这段文本会被放进网址」的场景,把空格、中文等转成百分号形式,防的是 URL 结构被破坏。把该 URL 编码的文本做 HTML 转义,或者反过来,都不能达到目的。需要 URL 编码请用站内的「URL 编码/解码」工具。
遇到不认识的实体会怎样?原样保留,不报错也不吞字符。例如 &unknown; 不在命名对照表里,解码后仍是 &unknown;,统计区会显示「保留 N 个未识别」。数字与十六进制实体则按码点解码,超出 Unicode 范围或落在代理区间的非法码点同样原样保留。
HTML 转义能防住所有 XSS 吗?不能一概而论。在「文本节点」和「普通属性值」这两个上下文里,五字符转义是有效的第一道防线;但把不可信数据放进 script 代码、style 样式、URL 地址(javascript: 伪协议)、事件处理属性等上下文时,HTML 转义并不足够,需要按上下文做专项处理,并配合 CSP 等纵深防御。本工具只做字符转换,不能替代安全审计。
数据会上传到服务器吗?不会。转义与解码全部在你浏览器内用 JavaScript 完成,页面不调用任何后端接口,断网状态下照样能用,适合处理含密钥片段、内部配置等敏感文本。