JavaScript编码相关
1、JS使用的是Unicode字符集,每个字符占用16位。
2、在JS中,每一个字符都等同于一个length为6的Unicode编码串,比如:
‘我’===‘\u6211’。
3、字符的编码形式可以用如下方式得到:
A. ‘我’.charCodeAt(0).toString(16)==‘6211’
其中charCodeAt() 方法可返回指定位置的字符的 Unicode 编码。这个返回值是 0 - 65535之间的整数。
B. 而ASCII字符在0~255之间,故有:
‘A’.charCodeAt(0).toString(16)==‘41’
即:’A’===‘\u0041’
4、关于escape,encodeURI,和encodeURI Component:
A. 相应3个解码函数:unescape,decodeURI,decodeURIComponent
B. escape ('我')=="%u6211",和charCodeAt是一样的,escape方法把字符转换为JS的Unicode字符序列,数字和字母除外
C. encodeURI Component('我')===encodeURI('我')== "%E6%88%91",把字符串采用UTF-8编码格式
D. 部分字符不编码:
escape不编码字符有69个:*,+,-,.,/,@,_,0-9,a-z,A-Z
encodeURI不编码字符有82个:!,#,$,&,',(,),*,+,,,-,.,/,:,;,=,?,@,_,~,0-9,a-z,A-Z
encodeURIComponent不编码字符有71个:!, ',(,),*,-,.,_,~,0-9,a-z,A-Z
encodeURI的目的是对 URI 进行完整的编码,因此对以下在 URI 中具有特殊含义的 ASCII 标点符号,encodeURI() 函数是不会进行转义的:;/?:@&=+$,#
如果 URI 组件中含有分隔符,比如 ? 和 #,则应当使用 encodeURIComponent()方法分别对各组件进行编码
E. 对于那些会被编码的ASCII字符,三种方法的编码结果是一样的,比如,对空格的编码:
Escape(‘ ’)== encodeURI(‘ ’)== encodeURIComponent(‘ ’)==’%20’
5、关于URL特殊字符的转义:
1. + URL 中+号表示空格 %2B
2. 空格 URL中的空格可以用+号或者编码 %20
3. / 分隔目录和子目录 %2F
4. ? 分隔实际的 URL 和参数 %3F
5. % 指定特殊字符 %25
6. # 表示书签 %23
7. & URL 中指定的参数间的分隔符 %26
8. = URL 中指定参数的值 %3D
应用中,修改客户端,将客户端带“+”的参数中的“+”全部替换为“2B%”,这样参数传到服务器端时就能得到“+”了