decodeURIComponent()

Baseline 已广泛支持

此特性已相当成熟,可在许多设备和浏览器版本上使用。自 ⁨2015 年 7 月⁩以来,各浏览器均已提供此特性。

decodeURIComponent() 函数用于解码由 encodeURIComponent() 或类似例程先前创建的统一资源标识符 (URI) 组件。

试一试

function containsEncodedComponents(x) {
  // ie ?,=,&,/ etc
  return decodeURI(x) !== decodeURIComponent(x);
}

console.log(containsEncodedComponents("%3Fx%3Dtest")); // ?x=test
// Expected output: true

console.log(containsEncodedComponents("%D1%88%D0%B5%D0%BB%D0%BB%D1%8B")); // шеллы
// Expected output: false

语法

js
decodeURIComponent(encodedURI)

参数

encodedURI

统一资源标识符的编码组件。

返回值

一个新字符串,表示给定编码统一资源标识符 (URI) 组件的解码版本。

异常

URIError

如果 encodedURI 包含一个后面没有跟着两位十六进制数字的 %,或者转义序列没有编码一个有效的 UTF-8 字符,则会抛出此错误。

描述

decodeURIComponent() 是全局对象的函数属性。

decodeURIComponent() 使用与 decodeURI() 中描述相同的解码算法。它解码所有转义序列,包括那些不是由 encodeURIComponent 创建的序列,例如 -.!~*'()

示例

解码西里尔语 URL 组件

js
decodeURIComponent("JavaScript_%D1%88%D0%B5%D0%BB%D0%BB%D1%8B");
// "JavaScript_шеллы"

捕获错误

js
try {
  const a = decodeURIComponent("%E0%A4%A");
} catch (e) {
  console.error(e);
}

// URIError: malformed URI sequence

从 URL 解码查询参数

decodeURIComponent() 不能直接用于从 URL 解析查询参数。它需要一些准备工作。

js
function decodeQueryParam(p) {
  return decodeURIComponent(p.replace(/\+/g, " "));
}

decodeQueryParam("search+query%20%28correct%29");
// 'search query (correct)'

规范

规范
ECMAScript® 2026 语言规范
# sec-decodeuricomponent-encodeduricomponent

浏览器兼容性

另见