js urldecode实现
JavaScript URL 解码实现
在 JavaScript 中,URL 解码可以通过内置的 decodeURIComponent() 函数实现。该函数用于解码由 encodeURIComponent() 编码的 URI 组件。
使用 decodeURIComponent()
decodeURIComponent() 函数解码 URI 组件的特殊字符,例如 %20 会被解码为空格。

const encodedUrl = "Hello%20World%21";
const decodedUrl = decodeURIComponent(encodedUrl);
console.log(decodedUrl); // 输出: "Hello World!"
处理异常情况
如果传入的字符串包含无效的编码序列(如 % 后没有跟随两个十六进制数字),decodeURIComponent() 会抛出 URIError 异常。可以使用 try-catch 处理异常。
try {
const encodedUrl = "Hello%20World%%";
const decodedUrl = decodeURIComponent(encodedUrl);
console.log(decodedUrl);
} catch (e) {
console.error("解码失败:", e.message);
}
替代方法:decodeURI()
decodeURI() 也可以解码 URL,但它不会解码 encodeURIComponent() 编码的所有字符(如 #、&、/ 等)。通常推荐使用 decodeURIComponent()。

const encodedUrl = "https%3A%2F%2Fexample.com%2Fpath";
const decodedUrl = decodeURI(encodedUrl);
console.log(decodedUrl); // 输出: "https://example.com/path"
手动实现 URL 解码
如果需要手动实现 URL 解码逻辑,可以通过正则表达式替换和 unescape() 函数完成。
function customUrlDecode(encodedStr) {
return encodedStr.replace(/%([0-9A-F]{2})/g, (match, p1) => {
return String.fromCharCode(parseInt(p1, 16));
});
}
const encodedUrl = "Hello%20World%21";
const decodedUrl = customUrlDecode(encodedUrl);
console.log(decodedUrl); // 输出: "Hello World!"
注意:unescape() 已废弃,不建议在生产环境中使用,此处仅作演示用途。
总结
- 使用
decodeURIComponent()解码完整的 URI 组件。 - 使用
decodeURI()解码完整的 URL(不处理组件)。 - 手动实现时需注意编码规则和异常处理。






