该如何使用encodeURIcomponent()

342 阅读1分钟

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!"