如何使用URL 編碼解碼
- 選擇「編碼」或「解碼」,編碼時再選 encodeURIComponent(單一參數)或 encodeURI(整個網址)。
- 在輸入框輸入文字,結果即時出現在下方;處理表單資料時可勾選「空白使用 +」。
- 按「複製結果」帶走內容,或按「用結果反向轉換」核對是否能正確還原。
- 要分析網址時,把完整網址貼到下方「網址解析」,即可看到各部分與已解碼的查詢參數。
為什麼網址需要編碼?
依照 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-- 格式。
輸入的網址會被送出嗎?
不會。編碼、解碼與網址解析都在瀏覽器中完成,不會連線到你輸入的網址,也不會上傳到任何伺服器。
最後更新: