js实现urldecode
使用 decodeURIComponent 函数
JavaScript 提供了内置的 decodeURIComponent 函数,用于解码经过 encodeURIComponent 编码的 URL 字符串。该方法会解码 URL 中的特殊字符(如 %20 转换为空格)。

const encodedUrl = 'https%3A%2F%2Fexample.com%2Fpath%3Fquery%3Dvalue';
const decodedUrl = decodeURIComponent(encodedUrl);
console.log(decodedUrl); // 输出: "https://example.com/path?query=value"
处理异常情况
如果字符串包含无效的编码序列(如 % 后跟非十六进制字符),decodeURIComponent 会抛出异常。可以通过 try-catch 捕获错误:
try {
const result = decodeURIComponent('%invalid');
} catch (e) {
console.error('解码失败:', e.message); // 输出: "解码失败: URI malformed"
}
替代方案:自定义解码函数
如果需要更灵活的处理(如忽略无效编码),可以通过正则表达式实现自定义解码:
function customDecodeURIComponent(str) {
return str.replace(/%([0-9A-F]{2})/gi, (match, hex) => {
const charCode = parseInt(hex, 16);
return String.fromCharCode(charCode);
});
}
const encodedStr = '%7E%40%23%24%25%5E%26*';
console.log(customDecodeURIComponent(encodedStr)); // 输出: "~@#$%^&*"
注意事项
decodeURI与decodeURIComponent的区别:前者用于解码完整 URL(不解码?,=,&等保留字符),后者解码所有编码字符。- 编码/解码需配对使用:若原始字符串用
encodeURIComponent编码,必须用decodeURIComponent解码。







