很多时候我们需要对url进行编码来进行传输,常用的对url编码的方式有2种encodeURI
encodeURIComponent
,相应的解码方法为:decodeURI
decodeURIComponent
。本文说明他们的区别和各自的使用场景。
区别
- encodeURI 不会对下列字符编码 ASCII字母、数字、~!@#$&*()=:/,;?+'
- encodeURIComponent 不会对下列字符编码 ASCII字母、数字、~!*()'
所以encodeURIComponent
比encodeURI
编码的范围更大。
实际例子来说,encodeURIComponent
会把 http://
编码成http%3A%2F%2F
而encodeURI却不会。
var str = "http://www.cnlogs.com/blogs/my new blog";
var encodeStr = encodeURI(str);
//http://www.cnlogs.com/blogs/my%20new%20blog
console.log(encodeStr)
var encodeComstr = encodeURIComponent(str)
//http%3A%2F%2Fwww.cnlogs.com%2Fblogs%2Fmy%20new%20blog
//可见这个url已经不能正常访问
console.log(encodeComstr);
var ans = decodeURI(encodeStr)
console.log(ans)
ans = decodeURIComponent(encodeComstr)
console.log(ans)
场景
- 如果你需要编码整个url,然后要使用这个url,使用encodeURI方法
- 编码URL中的参数的时候,那么encodeURIComponent是最好方法
var param = "/user/newbook"; //param为参数
param = encodeURIComponent(param); //因为参数含有/,所以必须要用此方法
var url = "http://www.baidu.com?param=" + param;