在 JavaScript 中,有几个内置函数可以用于 URL 编码和解码:
encodeURI()
A-Z a-z 0-9 ; , / ? : @ & = + $ - _ . ! ~ * ' ( ) #
const url = "https://example.com/测试路径?name=值&age=20";
console.log(encodeURI(url));
// 输出: "https://example.com/%E6%B5%8B%E8%AF%95%E8%B7%AF%E5%BE%84?name=%E5%80%BC&age=20"
encodeURIComponent()
对 URI 的组件部分进行编码
不会编码:A-Z a-z 0-9 - _ . ! ~ * ' ( )
用于编码查询参数等部分
const param = "测试值";
console.log(encodeURIComponent(param));
// 输出: "%E6%B5%8B%E8%AF%95%E5%80%BC"
decodeURI()
const encodedUrl = "https://example.com/%E6%B5%8B%E8%AF%95";
console.log(decodeURI(encodedUrl));
// 输出: "https://example.com/测试"
const encodedParam = "%E6%B5%8B%E8%AF%95";
console.log(decodeURIComponent(encodedParam));
// 输出: "测试"
不推荐使用已废弃的 escape()
和 unescape()
函数
application/x-www-form-urlencoded
格式,可以使用 URLSearchParams
API 来处理:
const params = new URLSearchParams();
params.append('name', '测试');
params.append('age', '20');
console.log(params.toString());
// 输出: "name=%E6%B5%8B%E8%AF%95&age=20"
URL
对象来处理 URL:
const url = new URL('https://example.com');
url.searchParams.set('name', '测试');
console.log(url.href);
// 输出: "https://example.com/?name=%E6%B5%8B%E8%AF%95"