js unescape 实现
实现 JavaScript 的 unescape 函数
unescape 函数用于解码由 escape 编码的字符串。它将十六进制编码的字符(如 %20)转换回原始字符(如空格)。以下是几种实现方式:
使用原生 unescape 函数
JavaScript 原生提供了 unescape 函数,可以直接使用:

const encodedStr = 'Hello%20World%21';
const decodedStr = unescape(encodedStr);
console.log(decodedStr); // 输出: "Hello World!"
手动实现 unescape
如果需要手动实现 unescape 的功能,可以通过正则表达式替换实现:

function customUnescape(str) {
return str.replace(/%([0-9A-F]{2})/gi, function(match, hex) {
return String.fromCharCode(parseInt(hex, 16));
});
}
const encodedStr = 'Hello%20World%21';
const decodedStr = customUnescape(encodedStr);
console.log(decodedStr); // 输出: "Hello World!"
使用 decodeURIComponent
decodeURIComponent 是更现代的替代方案,但需要注意它不支持某些 escape 编码的字符(如 %uXXXX 格式):
const encodedStr = 'Hello%20World%21';
const decodedStr = decodeURIComponent(encodedStr);
console.log(decodedStr); // 输出: "Hello World!"
处理 %uXXXX 格式
如果需要处理 escape 特有的 %uXXXX 格式(Unicode 编码),可以扩展手动实现:
function fullUnescape(str) {
return str.replace(/%u([0-9A-F]{4})|%([0-9A-F]{2})/gi, function(match, uHex, hex) {
if (uHex) {
return String.fromCharCode(parseInt(uHex, 16));
} else {
return String.fromCharCode(parseInt(hex, 16));
}
});
}
const encodedStr = 'Hello%20World%21%u4F60%u597D';
const decodedStr = fullUnescape(encodedStr);
console.log(decodedStr); // 输出: "Hello World!你好"
注意事项
unescape是已废弃的函数,建议使用decodeURIComponent或decodeURI。decodeURIComponent无法解码%uXXXX格式,需手动处理。- 编码时推荐使用
encodeURIComponent而非escape。






