HTML 实体转义

HTML 实体转义与还原:必需字符 / 命名实体 / 数字实体三种模式,未知实体不静默丢弃。

把文本安全地放进 HTML 有三条铁律:& < > " ' 这五个字符必须转义,否则轻则排版错乱、重则 XSS;©、—、中文这类字符既可以用命名实体(&copy;)也可以用数字实体(&#xa9;);而拿到一段满是 &amp;lt; 的文本想看原文,就需要可靠的还原。

本工具按真实需求分了三种转义模式:「仅必需」只处理规范强制的五个字符,最贴近浏览器解析器的底线;「命名实体」把望文生义的符号也换成人能读懂的写法;「数字实体」把所有非 ASCII 统一成 &#xHH; 形式,任何老系统都能无损往返。解码方向三种写法通吃,认不出的实体原样保留——静默删掉用户没见过的东西比保留更危险。

什么时候用哪种模式

往 HTML 属性或正文里嵌动态文本,用「仅必需」——转义的越少,源码越可读,安全性不打折(必需五个字符就是防注入的全部)。要把源码交给人维护或放进邮件模板,用「命名实体」。要跨系统传输(CMS 接口、老编码环境、只收 ASCII 的通道),用「数字实体」。

转义与 XSS 的关系

XSS 的本质是数据被当成了代码。< 的转义让 <script> 变成无害文本,这是输出端防注入的基石。但要清楚边界:本工具帮你把文本安全地「放进」HTML,防注入的完整链条还包括正确的上下文(JavaScript 字符串、URL 参数各有自己的转义规则)与输出位置的判断,不能只靠一个工具。

常见问题

&amp;nbsp; 和普通空格有什么区别?
&amp;nbsp; 是不换行空格(U+00A0):HTML 会把连续的普通空格折叠成一个,而 nbsp 不会折叠、也不会在词间断行。它还常用来在行首制造缩进。本工具的解码会把它还原成真实的 U+00A0 字符。
为什么有些实体没有被还原?
HTML 命名实体有两千多个,本工具覆盖其中常用的两百多个。不在表里的实体(以及写错的实体)会原样保留并继续出现在结果里——宁可让你看见没处理的,也不静默输出错误内容。数字实体(&#169; / &#xa9;)则全部支持。
和 JSON 转义有什么区别?
两者的转义体系完全不同:HTML 实体解决「字符与标记的冲突」(&lt; 表示字面的 <),JSON 转义解决「字符串与语法的冲突」(" 表示字面的引号)。把 HTML 放进 JSON 字符串时两者都要做,且先用 HTML 规则转义再用 JSON 规则转义。本站另有专用的 JSON 转义工具。

相关工具