什麼是 URL 編碼?百分比編碼的完整說明
快速解答
URL 編碼(百分比編碼)將 URL 中的不安全字元替換為 % 後面接著兩個十六進位數字。例如,空格變成%20,& 變成%26。它確保 URLs 可以毫無歧義地傳輸。使用我們免費的 URL 編碼器和解碼器在瀏覽器中進行轉換。
介紹
URL 編碼,也稱為百分比編碼,是一種在 URL 中對特殊字元進行編碼的機制,以便它們可以安全地透過網路傳輸。 URLs 只能包含一組有限的 ASCII 字元 — 字母、數字和一些保留字元。任何其他字元(空格、引號、非 ASCII 字母)必須編碼為百分號 (%),後面跟著表示字元位元組值的兩個十六進位數字。 URL 編碼由 RFC 3986 定義。
步步
-
了解哪些字元需要編碼
非保留字元(A-Z、a-z、0-9、-、_、.、~)不需要編碼。保留字元 (:, /, ?, #, [, ], @, !, $, &, ', (, ), *, +, ,, ;, =) 在 URLs 中具有特殊意義,在用作資料時應進行編碼。所有其他字元(空格、引號、非 ASCII)都必須進行編碼。
-
了解編碼機制
每個需要編碼的字元都會轉換為其 UTF-8 位元組序列,然後每個位元組表示為 %XX,其中 XX 是十六進位值。空格 (0x20) → %20。非 ASCII 字元“é”(UTF-8:0xC3 0xA9)→ %C3%A9。
-
區分encodeURI 和encodeURIComponent
encodeURI() 對完整的 URL 進行編碼,但保留作為 URL 結構一部分的保留字元 (:/?&=)。 encodeURIComponent() 對除非保留字元之外的所有內容進行編碼 - 將其用於查詢參數值,其中保留字元是數據,而不是結構。
-
解碼百分比編碼的 URLs
解碼與編碼相反:%20 → 空格,%C3%A9 → é。使用decodeURI() 取得完整的URLs,使用decodeURIComponent() 取得查詢參數值。無效的轉義序列(如 %ZZ)會引發錯誤。
範例
編碼一個空格
輸入: hello world
輸出: hello%20world
對非 ASCII 文字進行編碼
輸入: café
輸出: caf%C3%A9
對查詢參數值進行編碼
輸入: name=John Doe & Co.
輸出: name%3DJohn%20Doe%20%26%20Co.
常見問題
- 當只有值需要編碼時,對整個 URL 進行編碼 — 編碼查詢參數值,而不是 URL 結構 (://?&=)。
- 雙重編碼 - 如果 URL 已經編碼,則再次編碼會產生 %2520 而不是 %20。如果不確定是否已經編碼,請先解碼。
- 錯誤地使用encodeURI 與encodeURIComponent —encodeURI 保留 URL 結構字元; encodeURIComponent 對它們進行編碼。使用後者作為查詢參數值。
- 無效的轉義序列 —%ZZ 或末尾的單一 % 無效,並且在解碼時會拋出錯誤。
提示
- 請務必對可能包含空格、特殊字元或使用者輸入的查詢參數值進行編碼,以防止 URL 注入。
- 對查詢參數值使用encodeURIComponent(),對只需要編碼不安全字元的完整URLs使用encodeURI()。
- URL 編碼不是加密-任何人都可以解碼它。切勿使用它來隱藏敏感資料。
- 使用我們的 URL 編碼器和解碼器在瀏覽器中進行即時、私密的轉換。