调研条件
- 客户端:qq浏览器、firfox、chrome
-
测试用例
- url中path带汉字
- url中query带汉字
- 页面中get请求或者post请求
- 页面中meta元数据 charset="utf-8" 或者 charset="gb2312"
调研结果(ps: 比较片面,受浏览器种类和版本影响,结果可能不同,结果不代表绝对性,只是利用有效条件)
qq浏览器行为和chrome行为一致,会对中文进行编码,firfox不会
encodeURI和encodeURIComponent的重要性
因为各个浏览器的行为不一致,所以给开发人员带来困惑,需要一种通用的方法来避免掉多种适配的麻烦。所以encdoeURI和encodeURIComponent这两个标准就出现了,encodeURI现在已经用的少了,基本都用encodeURIComponent
encodeURI vs encodeURIComponent
不同点
encodeURI: 除掉特定字符不编码外(包括浏览器访问url里面的预留符号和其
他得一些符号), 这些不编码的符号是: A-Z a-z 0-9 ; , / ? : @ & = + $ - _ . ! ~ * ' ( ),其他字符都要编码
encodeURIComponent: 除特定字符编码外,其他字符都编
码(包括浏览器url里面的预留字符),这些不编码的符号是:A-Z a-z 0-9 - _ . ! ~ * ' ( )
相同点
都是采用的utf-8编码
例子
var test = 'http://www.test.com/例子'
encodeURI(test) //结果:"http://www.test.com/%E4%BE%8B%E5%AD%90"
encodeURIComponent(test) //结果: "http%3A%2F%2Fwww.test.com%2F%E4%BE%8B%E5%AD%90"
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。