HTML实体
为什么要添加html实体?
在网页中以&#开头的是HTML实体,一些字符在 HTML 中是预留的,拥有特殊的含义,比如小于号‘<’用于定义 HTML 标签的开始。如果我们希望浏览器正确地显示这些字符,我们必须在 HTML 源码中插入字符实体。
实体不是编码,是SGML转义序列,以unicode
编码为准。
实体分为两种
- 实体名称
- 实体编号
以空格符号举例
//实体名称
  //实体编号
注1:以「&#」开头的后接十进制数字,以「&#x」开头的后接十六进制数字
注2:实体名称并不一定被所有的浏览器支持,但是实体编号是一定支持的。
显示结果 | 描述 | 实体名称 | 实体编号 |
---|---|---|---|
空格 | |   | |
< | 小于号 | < | < |
> | 大于号 | > | > |
& | 和号 | & | & |
" | 引号 | " | " |
’ | 撇号 | ' (IE不支持) | ' |
注:实体对大小写敏感。
汉字转化为HTML实体编号的方法
主要格式为三部分组成
&# + ASCII码 +;
PHP内可用的方法
将字符串和汉字全部转化为HTML实体
htmlentities()
只转化特殊字符为HTML实体的函数
htmlspecialchars()
包含: & " ' < >
将HTML实体转化为字符串或汉字
html_entity_decode()
获取字符与实体的翻译表
print_r(get_html_translation_table())
参数:第一个可选参数可以指定返回的翻译表
HTML_SPECIALCHARS - 默认。翻译需要 URL 编码的字符,以便正确显示在 HTML 页面上
HTML_ENTITIES - 翻译所有需要 URL 编码的字符,以便正确地显示在 HTML 页面上
HTML实体的利用
参考:https://www.cnblogs.com/escape-w/p/10162831.html
浏览器渲染步骤:
- 解析HTML生成DOM树。
- 解析CSS生成CSSOM规则树。
- 将DOM树与CSSOM规则树合并在一起生成渲染树。
- 遍历渲染树开始布局,计算每个节点的位置大小信息。
- 将渲染树每个节点绘制到屏幕。
对于HTML,浏览器会在遇到html标签后,对标签内的实体编码进行解码,然后可以触发js动作
在进行对网站的XSS利用的时候,如果遇到过滤,可以使用实体编码进行绕过。
DOM树建立早于对HTML实体的解析,因此DOM树被固定了,自解码形成的新标签不会进入DOM树内,但是JS可以对节点进行增删改查的操作。