如何解碼 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 的結構。