URL 編碼解碼

把中文或特殊字元轉成網址可用的百分比編碼,或把 %E4%B8%AD 這類亂碼還原成文字;也能把一長串網址拆成主機、路徑與參數表。


網址解析

如何使用URL 編碼解碼

  1. 選擇「編碼」或「解碼」,編碼時再選 encodeURIComponent(單一參數)或 encodeURI(整個網址)。
  2. 在輸入框輸入文字,結果即時出現在下方;處理表單資料時可勾選「空白使用 +」。
  3. 按「複製結果」帶走內容,或按「用結果反向轉換」核對是否能正確還原。
  4. 要分析網址時,把完整網址貼到下方「網址解析」,即可看到各部分與已解碼的查詢參數。

為什麼網址需要編碼?

依照 RFC 3986,網址只能使用英文字母、數字與少數符號。中文、空白以及在網址中有特殊意義的字元(例如 ? & = # /),都必須轉成「百分比編碼」:先以 UTF-8 轉成位元組,再把每個位元組寫成 % 加兩位十六進位數字。例如「中」的 UTF-8 是 E4 B8 AD,編碼後就是 %E4%B8%AD。瀏覽器網址列通常會把編碼後的網址顯示成中文,但複製貼上到文件或通訊軟體時,就會變成一長串 % 開頭的字元。這不是亂碼,只要解碼就能還原。

encodeURIComponent 與 encodeURI 的差別

encodeURIComponent 會編碼除了英數字與 - _ . ! ~ * ' ( ) 以外的所有字元,包括 / ? & = #,適合用在「單一參數值」或「路徑中的一段」。例如搜尋關鍵字含有 & 時,若沒有用它編碼,& 會被誤認為下一個參數的開頭。

encodeURI 則保留網址的結構字元,只編碼中文、空白等字元,適合處理「整個網址」。常見錯誤是對整個網址使用 encodeURIComponent,導致 https:// 變成 https%3A%2F%2F 而無法開啟;或反過來對參數值使用 encodeURI,結果 & 與 = 沒有被編碼。

空白要編成 %20 還是 +?

在網址路徑中,空白一律寫成 %20。HTML 表單以 application/x-www-form-urlencoded 送出時,查詢字串中的空白則會寫成 +,PHP 的 urlencode 與許多後端框架也採用這種格式。解碼表單資料時要把 + 還原成空白,否則會留下多餘的加號;但若資料中原本就有加號,它應該已被編碼為 %2B。

常見問題

解碼後還是亂碼怎麼辦?

如果出現「不是有效的 UTF-8 序列」,表示原始網址可能使用 Big5 等舊編碼,或編碼字串被截斷。也有可能資料被編碼了兩次,此時可以把結果再解碼一次。

為什麼解碼時說 % 後面必須接兩位十六進位數字?

百分比編碼固定是 % 加上 0–9、A–F 的兩個字元。若文字中本來就有單獨的 %,例如「50%」,應先編碼為 %25,解碼時才不會出錯。

中文網域名稱為什麼變成 xn-- 開頭?

網域名稱不使用百分比編碼,而是使用 Punycode(國際化網域名稱,IDN)。網址解析中的主機欄位會顯示瀏覽器實際使用的 xn-- 格式。

輸入的網址會被送出嗎?

不會。編碼、解碼與網址解析都在瀏覽器中完成,不會連線到你輸入的網址,也不會上傳到任何伺服器。

最後更新: