URI与URL
URI是统一资源标识符,URL是统一资源定位器,所有URL都是URI,但并非所有URI都是URL,所以URI是URL的超集,就像是js是ts的超集。
为什么我们需要encode
因为URL只能包含标准的128个ASCII集中的字符,URL中特殊字符如& ? 等需要转义。
encodeURI 与 encodeURIComponent有什么区别
encodeURIComponent 被用于URI的组件(也就是URL的一部分字符串)
encodeURI 用于整个URI或者URL
什么时候encode
1.url中有空格时,如:
encodeURI("http://www.demo.com/a file index.html")
2.get请求 参数为string时,如:
let param = encodeURIComponent('name & age')
let url = "www.demo.com?search=" + param
总结
如果处理完整URL用encodeURI,如果是处理URL的一部分用encodeURIComponent
额外
encodeURI 不会encode~!@#$&*()=:/,;?+'
encodeURIComponent 不会encode~!*()'
字符A-Z a-z 0-9 - _ . ! ~ * ' ( ) 不会被escaped
理解encode与escaped
举两个小栗子方便小伙伴理解编码与转义
1.encoding 编码
input
const originalString = 'Hello, world!';
const encodedString = encodeURIComponent(originalString);
console.log(encodedString);
output
Hello%2C%20world%21
2.escaping 转义
input
const myString = "I said, \"Hello!\"";
console.log(myString);
或者 const myString = 'I said, "Hello!"';
output
I said, "Hello!"