js urldecode 实现
URL 解码实现方法
在 JavaScript 中,URL 解码可以通过内置的 decodeURIComponent() 函数实现。该函数用于解码由 encodeURIComponent() 编码的 URI 组件。
基本用法

const encodedUrl = 'Hello%20World%21';
const decodedUrl = decodeURIComponent(encodedUrl);
console.log(decodedUrl); // 输出: "Hello World!"
处理异常情况
如果传入的字符串包含无效的编码序列(如 % 后跟非十六进制数字),decodeURIComponent 会抛出 URIError 异常。可以通过 try-catch 处理:
try {
const result = decodeURIComponent('%invalid');
} catch (e) {
console.error('解码失败:', e.message);
}
替代方案
对于需要更宽松解码的场景(如处理部分编码的 URL),可以使用 decodeURI() 函数。该函数不会解码属于 URL 特殊字符的编码(如 :/?#[]@ 等):

const url = 'https://example.com/%7Euser';
console.log(decodeURI(url)); // 输出: "https://example.com/~user"
手动实现
如果需要自定义解码逻辑,可以通过正则表达式和 parseInt 手动实现:
function customDecodeURIComponent(str) {
return str.replace(/%([0-9A-F]{2})/gi, (match, p1) => {
return String.fromCharCode(parseInt(p1, 16));
});
}
注意事项
decodeURIComponent会解码所有百分号编码,包括可能影响 URL 结构的字符(如/或?)- 处理用户输入时应始终使用
try-catch包裹解码操作 - 现代浏览器都支持这两个函数,无需 polyfill






