Ad
DevToolXDevToolX

URL 編解碼

將文字進行 URL 編碼或解碼

關於 URL 編解碼

URL 編碼(正式名稱為 percent-encoding,規範於 RFC 3986)把 URL 中不合法或具有特殊語意的字元轉成 % 加兩位十六進位數字的格式。它與 Base64 完全不同——只編碼會破壞 URL 結構的字元,安全字元保持原樣。這個工具讓你快速編解碼這類字串,對於組裝查詢字串、建構含有特殊字元的 redirect URL,或把使用者輸入放入 URL 時不可或缺。

常見使用情境

對 query string 參數值進行編碼
& 和 = 在 query string 裡有結構性意義,對每個參數值單獨編碼,才能避免解析器誤判參數邊界。
在 URL 中嵌入另一個 URL
redirect_uri 參數本身是完整 URL,必須先 percent-encode,外層 URL 解析器才不會誤解其中的斜線與查詢字元。
把使用者輸入安全地放進 URL
對使用者輸入的空格、Unicode 字元、標點符號編碼後再組進 URL,防止連結斷裂或注入問題。
解碼 log 裡看不懂的 URL
把 server log 或網路封包裡的 percent-encoded 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。

相關工具