使用方法
- 选择“编码”以确保文本可安全用于 HTML,或选择“解码”将实体还原为字符。
- 编码时,可选择保留重音字母和符号,或将它们转换为实体。
- 输入或粘贴文本,结果会即时更新。
- 复制结果,或使用“将输出用作输入”检查解码后是否还原为原文。
工作原理
在 HTML 中,少数字符具有特殊含义:< 用于开始标签,& 用于开始实体," 或 ' 用于结束属性值。若要将它们显示为文本,必须写成字符引用:< 对应 <,> 对应 >,& 对应 &," 对应 ",' 对应 '。撇号使用数字形式,因为 ' 在 HTML 4 中未定义。
保存和提供页面时,只要使用现代网站默认的 UTF-8 编码,其他所有字符(包括带重音符号的字母、中文和 emoji)都可以直接书写。只有对某些不兼容 UTF-8 的系统(例如一些旧版邮件模板或数据库),才需要将这些字符转换为实体。此时可以选择有常用名称的命名实体(其余字符使用数字形式),例如 é;也可以为每个字符都使用数字引用,例如 é。
解码时不会使用浏览器的 HTML 解析器,而是使用内置表格,其中包含 HTML 4.01 的全部 252 个命名实体、' 和约 30 个常见 HTML5 名称,以及十进制和十六进制引用。数字引用遵循 HTML5 规则:�、代理项值和大于 U+10FFFF 的值会转换为替换字符 �;值为 128–159 的字符按 Windows-1252 处理,因此 – 会变成短破折号。浏览器也接受少数不带结尾分号的旧式名称,例如 & 和 ©。HTML5 定义了 2,000 多个名称;表格中未收录的少见名称会保持不变,并列出供参考。
在将文本插入 HTML 之前进行转义,是防御跨站脚本攻击(XSS)的重要措施,但这种做法仅适用于元素内容和带引号的属性值。放在 <script> 块、style 属性或 URL 中的文本需要使用不同的转义方式。
示例
在网页上显示代码
若要在博客文章中将 <div class="box"> 显示为文本,可将其编码为 <div class="box">。浏览器会显示原始标签,而不会创建元素。
为旧版邮件模板准备文本
选择“有对应名称时使用命名实体”后,“Café – 5 €”会变为 Café – 5 €,即使邮件使用非 UTF-8 字符集发送,也能正确显示。
清理抓取或导出的文本
某个 CMS 导出内容中包含 Fish & Chips – £9。解码后得到 Fish & Chips – £9,可直接粘贴到电子表格中。
常见问题
HTML 中哪些字符必须转义?
在元素内容中,必须转义 & 和 <(也建议转义 >)。在属性值中,还要转义用于括起属性值的引号。无论何处都转义全部五个字符(& < > " '),是本工具采用的简单安全规则。
命名实体和数字实体有什么区别?
© 这样的命名实体更易读,但只适用于有限的一部分字符。©(十进制)或 ©(十六进制)这样的数字引用适用于所有 Unicode 字符,包括表情符号。
为什么 解码后看起来像空格?
是不换行空格(U+00A0)。它看起来和普通空格一样,但会阻止换行,而且不会被 HTML 合并。它与普通空格是不同的字符,在比较或搜索文本时需要注意这一点。
é 这样的重音字母需要编码吗?
如果页面使用 UTF-8(<meta charset="utf-8">),就不需要;几乎所有现代网页都使用 UTF-8。保留默认设置即可,只有五个特殊字符会被转义。
编码足以防止 XSS 吗?
对于插入 HTML 元素内容或带引号的属性值中的不可信文本,这样就足够了。但对于 JavaScript 代码、CSS、无引号的属性或 href="javascript:…" 这样的 URL,这样做还不够;这些内容需要根据具体上下文进行处理。
隐私
编码和解码均在浏览器中通过普通字符串操作完成;文本不会被渲染为 HTML、上传、存储或纳入分析。