Skip to content

JavaScript中的encodeURI()和encodeURIComponent()有什么区别?

encodeURIComponent()

encodeURIComponent() 函数会对给定字符串中的所有字符进行编码,除了 A-Z a-z 0-9 - _ . ! ~ * ' ( )。如果要编码的字符串只是URL的一部分,应使用此函数。

const partOfURL = 'my-page#with,speci@l&/"characters"?';
const fullURL = 'https://my-website.com/my-page?query="a%b"&user=1';

encodeURIComponent(partOfURL); // 正确,转义特殊字符
// 'my-page%23with%2Cspeci%40l%26%2F%22characters%22%3F'

encodeURIComponent(fullURL);  // 错误,编码后的URL无效
// 'https%3A%2F%2Fmy-website.com%2Fmy-page%3Fquery%3D%22a%25b%22%26user%3D1'

encodeURI()

encodeURI() 函数会对给定字符串中的所有字符进行编码,除了 A-Z a-z 0-9 ; , / ? : @ & = + $ - _ . ! ~ * ' ( ) #。如果要编码的字符串是完整的URL,应使用此函数。

const partOfURL = 'my-page#with,speci@l&/"characters"?';
const fullURL = 'https://my-website.com/my-page?query="a%b"&user=1';

encodeURI(partOfURL); // 错误,未转义所有特殊字符
// 'my-page#with,speci@l&/%22characters%22?'

encodeURI(fullURL);  // 好的,编码后的URL是有效的
// 'https://my-website.com/my-page?query=%22this%25thing%22&user=1'