js 实现urlencode
URL编码的基本概念
URL编码(也称为百分号编码)是将URL中的特殊字符转换为%后跟两位十六进制数的形式。例如,空格被编码为%20。
使用encodeURIComponent
JavaScript提供了encodeURIComponent函数,用于对URI组件进行编码。该函数会将除了字母、数字和- _ . ! ~ * ' ( )之外的字符都进行编码。

const encoded = encodeURIComponent('https://example.com/?name=张三&age=20');
console.log(encoded);
// 输出:https%3A%2F%2Fexample.com%2F%3Fname%3D%E5%BC%A0%E4%B8%89%26age%3D20
使用encodeURI
encodeURI函数用于编码整个URI,但不会编码保留字符如:/?#[]@!$&'()*+,;=。

const encoded = encodeURI('https://example.com/?name=张三&age=20');
console.log(encoded);
// 输出:https://example.com/?name=%E5%BC%A0%E4%B8%89&age=20
手动实现URL编码
如果需要更细粒度的控制,可以手动实现URL编码函数。
function urlEncode(str) {
return str.split('').map(char => {
const code = char.charCodeAt(0);
if (code >= 48 && code <= 57 || // 0-9
code >= 65 && code <= 90 || // A-Z
code >= 97 && code <= 122 || // a-z
char === '-' || char === '_' || char === '.' || char === '~') {
return char;
}
return '%' + code.toString(16).toUpperCase();
}).join('');
}
console.log(urlEncode('https://example.com/?name=张三&age=20'));
// 输出:https%3A%2F%2Fexample%2Ecom%2F%3Fname%3D%E5%BC%A0%E4%B8%89%26age%3D20
解码URL
使用decodeURIComponent可以解码URL编码的字符串。
const decoded = decodeURIComponent('https%3A%2F%2Fexample.com%2F%3Fname%3D%E5%BC%A0%E4%B8%89%26age%3D20');
console.log(decoded);
// 输出:https://example.com/?name=张三&age=20
注意事项
encodeURIComponent适用于编码URI的组件(如查询参数),而encodeURI适用于编码整个URI。- 手动实现时需要注意保留字符的处理,确保与标准一致。
- 解码时应使用对应的
decodeURIComponent或decodeURI函数。






