js 实现urlencode
URL编码的基本概念
URL编码(Percent-Encoding)是一种将特殊字符转换为安全传输格式的机制。通过将字符替换为%后跟两位十六进制值的形式,确保URL中不会出现歧义字符(如空格、&、=等)。
原生JavaScript实现方法
使用内置函数encodeURIComponent()可完成大部分需求:
const encoded = encodeURIComponent('测试&value=1');
console.log(encoded); // 输出:"%E6%B5%8B%E8%AF%95%26value%3D1"
注意:
- 该方法会对
!,',(,),*,-,_,~,.等字符保留原样 - 若需编码整个URL(含协议和域名),应使用
encodeURI()
手动实现方案
如需自定义编码逻辑,可通过字符遍历处理:
function customUrlEncode(str) {
return str.split('').map(char => {
const code = char.charCodeAt(0);
return code > 0x20 && code < 0x7F && !/[<>#%{}|\^~[]`]/.test(char)
? char
: '%' + code.toString(16).toUpperCase();
}).join('');
}
关键逻辑:
- 检查ASCII码范围(0x20-0x7F)
- 排除保留字符和危险字符
- 非安全字符转为
%XX格式
特殊场景处理
处理表单数据时需注意:
const formData = { name: "张三", age: 25 };
const encodedParams = Object.entries(formData)
.map(([k, v]) => `${encodeURIComponent(k)}=${encodeURIComponent(v)}`)
.join('&');
// 结果:"name=%E5%BC%A0%E4%B8%89&age=25"
解码方法
使用decodeURIComponent()还原数据:

const decoded = decodeURIComponent('%E6%B5%8B%E8%AF%95');
console.log(decoded); // 输出:"测试"






