摘要:前端转义,平常用的时候感觉不多,因为没有bug,所以不会去注意到转义,但其实说起来还是需要整理熟悉一下,因为没有转义轻则破坏原有结构,重则造成XSS攻击,所以前端转义还是很有必要的。在这里介绍一下前端转义有哪些~
转义类型
前端的转义的类型有三种:
1.HTML转义
2.javascript转义(json转义)
3.url转义
HTML转义
HTML转义就是把HTML中的特殊字符利用转义字符进行表示。常用的转义字符如下表,”和’用于给变量赋值,&用于转义,<和>用于HTM标签。
字符 | 十进制 | 转义字符 |
---|---|---|
“ | " | " ; |
‘ | ' | &apos ; |
& | & | & ; |
< | < | < ; |
> | > | > ; |
不断开空格 |   |   ; |
举个例子,当输出到页面的字符串中带有<h1>标签的时候,会发生什么情况?
1 | // 将content输出到div中 |
上面的写法没有对<>进行转义,导致将content设置为html的时候会出现<h1>标签在html中进行了解析。下面,定义html_encode方法对str进行html转义,然后再把字符串作为html的内容,这样就不会出现标签被解析的情况。
1 | // 对str字符串进行html转义 |
javascript转义(json转义)
javascript转义比较简单,就是把特殊字符转成转义字符,常用的转义字符如下表。
转义字符 | 代码 |
---|---|
‘ | \’ |
“ | \” |
& | \& |
\ | \ |
换行符 | \n |
回车符 | \r |
制表符 | \t |
退格符 | \b |
换页符 | \f |
javascript转义经常会在定义字符串的时候遇到。1
2var ret = 'dont't click me'; // 报错
var ret = 'dont\'t click me'; // 正确
url转义
url只能使用英文字母,阿拉伯数字和某些标点符号,其他符号需要编码后才能使用。
浏览器会自动对url进行编码,不过各个浏览器使用的编码方法各异。目前大部分浏览器对url路径中的中文采用utf-8编码,对于url中的参数,大部分浏览器使用utf-8,而ie8以下是使用GB 2312编码。
另外一个点就是get请求中空格会被转变为+,但是在post请求中空格是可以直接传给后台的。
为了编码一致,我们可以在请求之前对url进行编码,实现编码统一。
url编码方法
目前,javascript提供的url编码方法有一下三种
1.escape()
2.encodeURI()
3.encodeURIComponent()
escape()
将url转化为Unicode的形式,这个方法目前在url编码上基本是废弃的,不过当你需要Unicode编码的url的时候还是需要用到它。
encodeURI()
除了常见的符号以外,对其他一些在网址中有特殊含义的符号”; / ? : @ & = + $ , #”,也不进行编码。编码后,它输出符号的utf-8形式,并且在每个字节前加上%。
encodeURIComponent()
在encodeURI()中不被编码的符号,在encodeURIComponent()中统统会被编码
写在最后
其实,转义说起来也就那么回事,但是真正遇到需要转义的场景有时会比较复杂,可能要进行多种转义才能得出结果,所以,遇到转义的时候要确定涉及多少种转义~