decodeURI()

Baseline 已廣泛支援

此特性已相當成熟,可在許多裝置和瀏覽器版本上使用。自 ⁨2015 年 7 月⁩以來,各瀏覽器均已提供此特性。

decodeURI() 函式用於解碼之前由 encodeURI() 或類似例程建立的統一資源識別符號 (URI)。

試一試

const uri = "https://mozilla.org/?x=шеллы";
const encoded = encodeURI(uri);
console.log(encoded);
// Expected output: "https://mozilla.org/?x=%D1%88%D0%B5%D0%BB%D0%BB%D1%8B"

try {
  console.log(decodeURI(encoded));
  // Expected output: "https://mozilla.org/?x=шеллы"
} catch (e) {
  // Catches a malformed URI
  console.error(e);
}

語法

js
decodeURI(encodedURI)

引數

encodedURI

一個完整的、已編碼的統一資源識別符號。

返回值

一個新字串,表示給定已編碼的統一資源識別符號 (URI) 的未編碼版本。

異常

URIError

如果 encodedURI 包含一個 % 後面沒有跟著兩個十六進位制數字,或者如果轉義序列沒有編碼一個有效的 UTF-8 字元,則丟擲此錯誤。

描述

decodeURI() 是全域性物件的一個函式屬性。

decodeURI() 函式透過將形式為 %XX 的每個轉義序列視為一個 UTF-8 程式碼單元(一個位元組)來解碼 URI。在 UTF-8 中,第一個位元組中前導 1 位的數量(可以是 0(用於 1 位元組 ASCII 字元)、2、3 或 4)表示字元中的位元組數。因此,透過讀取第一個轉義序列,decodeURI() 可以確定還需要消耗多少個轉義序列。如果 decodeURI() 未能找到預期的序列數量,或者如果轉義序列沒有編碼有效的 UTF-8 字元,則會丟擲 URIError

decodeURI() 會解碼所有轉義序列,但如果轉義序列編碼以下字元之一,則轉義序列會保留在輸出字串中(因為它們是 URI 語法的一部分)

; / ? : @ & = + $ , #

示例

解碼西裡爾字母 URL

js
decodeURI(
  "https://mdn.club.tw/en-US/docs/JavaScript_%D1%88%D0%B5%D0%BB%D0%BB%D1%8B",
);
// "https://mdn.club.tw/en-US/docs/JavaScript_шеллы"

decodeURI() 與 decodeURIComponent()

decodeURI() 假定輸入是一個完整的 URI,因此它不會解碼屬於 URI 語法的字元。

js
decodeURI(
  "https://mdn.club.tw/docs/JavaScript%3A%20a_scripting_language",
);
// "https://mdn.club.tw/docs/JavaScript%3A a_scripting_language"

decodeURIComponent(
  "https://mdn.club.tw/docs/JavaScript%3A%20a_scripting_language",
);
// "https://mdn.club.tw/docs/JavaScript: a_scripting_language"

捕獲錯誤

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

// URIError: malformed URI sequence

規範

規範
ECMAScript® 2026 語言規範
# sec-decodeuri-encodeduri

瀏覽器相容性

另見