跳至主要內容

如何解碼 URL 編碼的字串

解碼是百分比編碼的反向處理:每個 %XX 序列變成一個位元組,再把這些位元組當作 UTF-8 文字讀取。「組件」模式使用 decodeURIComponent(),因此結果與原始值完全相同。

計算範例

多位元組 UTF-8 序列會變成一個字元。

輸入
caf%C3%A9%20%26%20cr%C3%A8me
結果 · decodeURIComponent()
café & crème

%20 會變成空格,但 + 會保留為字面上的加號。

輸入
a+b%20c
結果 · decodeURIComponent()
a+b c

最後一個序列少了一位十六進位數字,因此工具會顯示錯誤。

輸入
%E0%A4%A
結果 · decodeURIComponent()
編碼後的 URL 無效

補上缺少的數字後,這三個位元組會解碼成一個天城文字母。

輸入
%E0%A4%A4
結果 · decodeURIComponent()
त

工具的處理方式

  • 每個 %XX 序列代表一個位元組,相鄰位元組會一起以 UTF-8 解碼,所以 %C3%A9 會變成 é。
  • 加號不會被當成空格:+ 仍然是 +。如果文字來自 HTML 表單,請先把 + 換成 %20 再解碼。
  • 只要有任何序列不完整或不是有效的 UTF-8,整個輸入就會出錯並被拒絕,不會只解碼一部分。
  • 「完整 URL」模式(decodeURI)會保留 %26、%2F、%3F 等保留字元的跳脫序列,以免改變 URL 的結構。

URL 編碼指南