網址編碼與解碼

替連結、查詢參數或表單本文做百分比編碼,或把它還原。預設 UTF-8,和瀏覽器的 encodeURIComponent 一致。對方如果是 Big5、GBK 或其他編碼,在字元編碼裡改。

網址編碼為什麼要分三種

一段網址裡,斜線有時必須留下,有時必須變成 %2F。表單裡的空格寫成 +,查詢串裡通常寫成 %20。整段用錯函數,是連結打開到錯誤頁面的常見原因。

  • 單個參數對應 encodeURIComponent。搜索詞、編號、回跳地址用這個。
  • 整段網址對應 encodeURI。它保留 : / ? #,只處理空格和非 ASCII。你已經有完整地址時用它。
  • 表單正文是 application/x-www-form-urlencoded。空格變成 +。這是 POST 正文,不是連結。

怎麼用

  1. 貼上原文,或已經編碼過的文字。
  2. 選擇編碼或解碼,再選和用途匹配的方式。
  3. 一組關鍵詞各佔一行時,打開“每一行單獨處理”。行內的斜線仍會按所選方式編碼。
  4. 解碼錶單正文時,讓 + 表示空格。普通查詢串裡空格已經是 %20。
  5. 提示百分號不完整時,某個 % 後面不是兩位十六進制,多半是被截斷,或已經解碼過一次又被當成編碼串。

中文和符號怎麼變

空格在連結裡是 %20,在表單裡是 +。參數值裡真正的加號必須寫成 %2B,否則服務端會把它讀成空格。& 和 = 如果出現在值裡面,也要編碼,不然會被當成下一個參數。

預設按 UTF-8,和 encodeURIComponent 一致:中文每個字節寫成 % 加兩位十六進位。“北京”不是一個轉義,而是一串。舊接口如果要求 Big5 或 GBK,把字元編碼改成對應項,同一段中文會得到另一串百分比。選 Hex 時,框裡按十六進位字節做百分比編碼。不要用「單一參數」去編碼整段 https://,否則冒號和斜線都會被換掉。字節層面可以對照 字串轉字節。Base64 是另一套,見 Base64。

常見問題

空格怎麼變成了加號?

你選的是表單正文。做連結時改成“單個參數”。

解出來還有 %20。

被編碼了兩次。再解一次,到能讀為止。

整段查詢串能一次編碼嗎?

不能。按 & 拆開,只編碼每個值,分隔符留下。“每一行單獨處理”就是為了這個。