HTML转义 - 实体编码解码
转换HTML特殊字符,防止XSS攻击
HTML转义知识
什么是HTML转义?
将HTML特殊字符(如< > &)转换为实体编码,避免被浏览器解析为HTML标签。
防止XSS攻击
对用户输入进行HTML转义是防止跨站脚本攻击(XSS)的重要手段。
显示代码示例
在网页中展示HTML代码时,需要转义才能正确显示而不被执行。
数据存储
将用户输入存入数据库前进行转义,输出时再反转义,确保数据安全。
实体名称与编号
HTML实体有两种形式:命名实体(如<)和数字实体(如<),效果相同。
必须转义的字符
HTML中必须转义的5个字符:< > & " ',它们在HTML中有特殊含义。
常见问题
什么是XSS攻击?HTML转义如何防护?
XSS(跨站脚本攻击)是攻击者在网页中注入恶意脚本,窃取用户数据或执行恶意操作。对用户输入的内容进行HTML转义,可以防止<script>等标签被执行。
应该在存储时转义还是显示时转义?
推荐在显示时转义(输出编码)。存储原始数据便于搜索和其他用途。如果在存储时转义,数据可能需要多次转义导致混乱,而且不同输出场景(HTML、JSON、URL)需要不同的编码方式。
和普通空格有什么区别?
是不间断空格(No-Break Space),不会被浏览器合并,也不会在此处换行。普通空格连续多个会被合并为一个。需要保留多个空格或防止自动换行时使用 。
单引号在HTML中必须转义吗?
取决于上下文。在HTML属性值中,如果属性值用单引号包裹,则单引号必须转义。建议统一转义单引号和双引号('→' "→"),确保在任何上下文都安全。
为什么有些框架自动转义HTML?
现代前端框架(React、Vue、Angular)默认对插值内容进行HTML转义,防止XSS攻击。如需插入HTML,需要使用特殊方法(如v-html、dangerouslySetInnerHTML),且需确保内容安全。
JSON中需要HTML转义吗?
JSON本身不需要HTML转义,它有自己的转义规则(如双引号用\")。但如果JSON数据最终要嵌入HTML页面,或者内容会被渲染为HTML,则仍需要进行HTML转义。
HTML实体对照表
| 字符 | 实体名称 | 实体编号 | 说明 |
|---|---|---|---|
| < | < | < | 小于号,HTML标签起始符 |
| > | > | > | 大于号,HTML标签结束符 |
| & | & | & | 和号,实体引用起始符 |
| " | " | " | 双引号,属性值界定符 |
| ' | ' | ' | 单引号,属性值界定符 |
|   | 不间断空格 | |
| © | © | © | 版权符号 |
| ® | ® | ® | 注册商标符号 |