编码相关
对工作中遇到相关的编码问题的一个总结。
编码出现的环境
- 直接显示在页面
- 在script 标签中
- 在页面事件中
- 在innerHTML 的语境
- 在页面链接的url中
- 提交url参数处理
- js 获取url参数值的时候
处理办法
1.对于要显示在页面中的数据,这个时候要防止标签的自闭合,以及属性中单引号和双引号。
- "<" ---> "<";
- ">" ---> ">";
- ' ---> ";
- " ---> ';
2.在JavaScript中单引号和双引号中都是表示字符串,并没有什么区别。
- ' ---> '
- " ---> "
- \ ---> \
- / ---> /
3.在页面事件中、在innerhtml的语境中。
这类语境涉及到了页面html和js环境,先进行js转义,然后再进行html转义。
4.页面url中
这类比较复杂,url中本身涉及到很多的特殊字符,此外也会涉及到html 和js 环境中的赋值的情况,
特别注意,url 编码和html的编码是不一样的,见后文附录url编码表和html编码表
- 在html 和js环境中,需要转义的字符为: ” ,' ,<,>,\ ,/
- 在其他环境中,需要转义的字符为:+,空格,?,=,&,#, %
这类字符的转义如下:
-
” ---> %22;
-
' ---> %22;
-
< ---> %3C
-
">" ---> %3E
-
\ ---> %5C
-
/ ---> %2F
-
"+" ---> %2b
-
空格 ---> %20
-
? ---> %3F
-
= ---> %3D
-
& ---> %26
-
"#" ---> 23
-
"%" ---> %25
-
提交url 参数的处理:
- Form表单提交方式:
不需要做任何处理,表单会依照页面的编码进行编码
- ajax的提交:
因为ajax的提交的时候,是拼接成url的方式提交给后端的,所以必须要考虑对 +,空格,?,=,&,#, % 的转义,通常使用 encodeURIComponent进行转义
- js 获取url参数的值的时候
- 得到url中的参数值的时候,首先必须要进行decodeURIComponent的转码才能使用,因为url中的一些特殊字符都经过了编码
- 将url的值设置到一些参数上时,比如隐藏表单上的value值的时候(作提交refer),需要进行encodeURIComponent 编码
网友评论