<& HTML转义
HTML实体转义 / 反转义 / URL编码
HTML实体转义 / 反转义 / URL编码
HTML转义是将特殊字符(<、>、&、"、')转换为HTML实体(< > & " '),防止浏览器解析为HTML标签。用于在网页中显示代码或用户输入内容。
防止XSS攻击。用户输入的<script>如不转义会被浏览器执行。转义后显示为文本而非执行代码。所有用户输入在输出到HTML前都应转义。
<=<、>=>、&=&、"="、'=(单引号')。还有空格 、版权©等。转义后&会被编码成&。
不是。HTML转义处理HTML里的特殊字符(<、>、&、"、'),用&实体表示;URL编码处理URL里的特殊字符(中文、空格、:、/等),用%xx表示。两种场景完全不同。
能。反转义(HTML实体解码)可以把<还原成<、&还原成&。但要注意多次转义会叠加,比如总字数里&被转成&后,再转一次会变成&amp;。
如果用户输入没转义就输出到页面,攻击者可以注入<script>窃取cookie、跳转钓鱼、篡改页面。这是OWASP Top 10常年上榜的Web安全漏洞,每个开发者都要防。
PHP用htmlspecialchars($str, ENT_QUOTES, 'UTF-8')转义,它默认转义<、>、&、"(加ENT_QUOTES带上单引号)。前端框架(如React的{})会自动转义,但用innerHTML拼接时需手动转义。
可以。把转义后的字符串放进HTML标签的内容区(如<p>...</p>)即可安全显示原文,浏览器会把它当文本渲染而不是执行。
HTML实体是"以&开头、以;结尾"的字符引用。分两种:命名实体(如©)和数字实体(如©)。浏览器解析时会把它渲染成对应字符。
| 字符 | 实体 | 用途 |
|---|---|---|
| < | < | 小于号 |
| > | > | 大于号 |
| & | & | 和号 |
| " | " | 双引号 |
| ' | ' | 单引号 |
| | 不换行空格 | |
| © | © | 版权符号 |
记住&一定要先转成&,否则可能被解析成实体开头。
存储型XSS:恶意代码存在数据库,用户浏览时执行。反射型XSS:恶意代码随URL带入。无论哪种,根因都是"不信任的输入被当成了代码执行"。
转义(编码输出)就是让浏览器把输入当"文本"而不是"代码"。这是最基础也最有效的防御手段,配合CSP、内容过滤等共同保障安全。
四种场景各有一套规则,别混用。用错可能导致乱码或安全漏洞。
| 场景 | 处理对象 | 示例结果 |
|---|---|---|
| HTML转义 | < > & " ' | < > & " ' |
| URL编码 | 中文 空格 : / ? | %E4%B8%AD %20 %3A %2F %3F |
| JS转义 | 引号 \ 换行 | \" \\ \n |
1. 输入文本。
2. 选择转义或反转义。
3. 复制结果。