URL 編解碼
將文字進行 URL 編碼或解碼
關於 URL 編解碼
URL 編碼(正式名稱為 percent-encoding,規範於 RFC 3986)把 URL 中不合法或具有特殊語意的字元轉成 % 加兩位十六進位數字的格式。它與 Base64 完全不同——只編碼會破壞 URL 結構的字元,安全字元保持原樣。這個工具讓你快速編解碼這類字串,對於組裝查詢字串、建構含有特殊字元的 redirect URL,或把使用者輸入放入 URL 時不可或缺。
常見使用情境
常見問題
為什麼 + 有時候代表空格?
在 HTML 表單的 application/x-www-form-urlencoded 編碼裡,+ 歷史上代表空格。但在 RFC 3986 規範的 URL percent-encoding 中,空格應編為 %20,不是 +。讀取 POST body 和讀取 URL 參數時,這個差異很重要。
為什麼 & 在參數值裡必須編碼?
& 是 query string 裡分隔參數的符號。如果參數值本身包含 &,URL 解析器會誤以為它是下一個參數的開始。把它編碼成 %26 就能讓它安全地留在值裡。
JavaScript 的 encodeURI 和 encodeURIComponent 有什麼差別?
encodeURI 用於整個 URL,會保留 :、/、?、&、=、# 這些 URL 結構字元不動。encodeURIComponent 用於單一參數名稱或值,除了 unreserved characters 以外全部編碼。組裝 URL 時,對個別參數值用 encodeURIComponent,對完整 URL 才用 encodeURI。
什麼情況下需要雙重編碼?
當一個已經 percent-encoded 的字串要再作為另一個 URL 的參數值時,需要雙重編碼。例如 redirect_uri 裡已有 %20,再編碼一次後 % 會變成 %25,外層解析器才不會提前解碼。接收端只解碼一次即可。
URL 編碼和 HTML 實體編碼一樣嗎?
不一樣。URL 編碼用 % 符號(& 變成 %26);HTML 實體編碼用 & 開頭(& 變成 &)。兩者使用場景不同,URL 裡用 percent-encoding,HTML 標記裡用 HTML entities。