📜  JavaScript 中 decodeURIComponent() 和 decodeURI() 函数的区别(1)

📅  最后修改于: 2023-12-03 15:01:40.173000             🧑  作者: Mango

JavaScript中decodeURIComponent()和decodeURI()函数的区别

JavaScript中有两个函数用于解码URI编码的字符串,它们是decodeURIComponent()decodeURI()。这两个函数的作用是将URI编码的字符串解码为可读的字符串。虽然它们的作用很相似,但它们之间有一些区别。

decodeURIComponent()

decodeURIComponent()函数用于解码完全由encodeURIComponent()函数编码的URI字符串。这意味着该函数只会解码那些被编码为UTF-8的特殊字符,例如%20%21等等。这个函数的语法如下:

decodeURIComponent(encodedURI)

其中,encodedURI是被URI编码的字符串。

下面是一个使用decodeURIComponent()函数解码URI字符串的示例:

var encoded = "https%3A%2F%2Fwww.baidu.com%2Fsearch%3Fq%3D%E5%BF%AB%E8%BD%A6";
var decoded = decodeURIComponent(encoded);

console.log(decoded);
// 输出:https://www.baidu.com/search?q=快车
decodeURI()

decodeURI()函数用于解码URI字符串,这些字符串可以包括非UTF-8字符,例如Unicode字符。在解码时,它会尝试将Unicode字符转换为UTF-8字符。然而,这个函数不能解码那些被encodeURIComponent()函数编码的特殊字符,例如%20%21等等。这个函数的语法如下:

decodeURI(encodedURI)

其中,encodedURI是被URI编码的字符串。

下面是一个使用decodeURI()函数解码URI字符串的示例:

var encoded = "https://www.baidu.com/search?keyword=%E5%BF%AB%E8%BD%A6&category=汽车";
var decoded = decodeURI(encoded);

console.log(decoded);
// 输出:https://www.baidu.com/search?keyword=快车&category=汽车
总结

根据上述描述,可以总结出decodeURIComponent()decodeURI()函数的区别:

  • decodeURIComponent()函数只解码那些被encodeURIComponent()函数编码的UTF-8字符;
  • decodeURI()函数解码所有URI字符串,但它不能解码那些被encodeURIComponent()函数编码的UTF-8字符;

因此,在使用这两个函数时,需要根据具体情况选择使用哪个函数。如果字符串只包含被encodeURIComponent()函数编码的特殊字符,则应该使用decodeURIComponent()函数。如果字符串包含非UTF-8字符或被encodeURIComponent()函数编码的特殊字符,则应该使用decodeURI()函数。