Web Development•
2026-02-12
•7 min
•alltools.one Team
urlencodingweb-developmenthttpapi
URL 編碼指南:為什麼以及如何編碼 URL
你是否好奇為什麼 URL 中的空格會變成 %20,而 & 符號會變成 %26?URL 編碼(又稱百分號編碼)將不安全的 URL 字元轉換為 Web 伺服器能夠理解的格式。
為什麼 URL 編碼很重要
URL 只能包含有限的 ASCII 字元集。特殊字元、空格和非 ASCII 文字需要編碼才能安全傳輸。若不編碼,URL 會以不可預測的方式失效——空格可能截斷 URL,& 符號可能被誤認為參數分隔符。
試試我們的 URL 編碼器/解碼器,看看任何文字在 URL 編碼後會如何轉換。
哪些字元需要編碼?
安全字元(無需編碼)
字母(A-Z, a-z)、數字(0-9),以及這些符號:-、_、.、~
保留字元(作為資料使用時需編碼)
| 字元 | 編碼後 | 在 URL 中的用途 |
|---|---|---|
: | %3A | 協定分隔符 |
/ | %2F | 路徑分隔符 |
? | %3F | 查詢字串起始 |
# | %23 | 片段識別碼 |
& | %26 | 參數分隔符 |
= | %3D | 鍵值分隔符 |
+ | %2B | 常用來表示空格 |
@ | %40 | 使用者資訊分隔符 |
% | %25 | 編碼指示符 |
必須編碼
空格(%20)、非 ASCII 字元(UTF-8 位元組編碼),以及安全字元集以外的任何字元。
URL 編碼實務
查詢參數
最常見的用途。建構搜尋 URL 或 API 請求時:
https://api.example.com/search?q=hello%20world&lang=en
表單資料
使用 method="GET" 的 HTML 表單會自動對欄位值進行 URL 編碼。在表單編碼中,空格會變成 +(與百分號編碼略有不同)。
路徑區段
URL 路徑中的檔案名稱和資源識別碼也需要編碼。名為 my report.pdf 的檔案在 URL 中會變成 my%20report.pdf。
各語言中的編碼
JavaScript:
encodeURIComponent('hello world & more')
// "hello%20world%20%26%20more"
decodeURIComponent('hello%20world')
// "hello world"
Python:
from urllib.parse import quote, unquote
quote('hello world & more')
# 'hello%20world%20%26%20more'
常見錯誤
- 重複編碼 — 對已編碼的 URL 再次編碼,會將
%20變成%2520 - 使用
encodeURI而非encodeURIComponent—encodeURI會跳過查詢值中重要的保留字元 - 未編碼
+號 — 在 URL 中,+可以代表空格。字面的加號必須編碼為%2B - 忽略非 ASCII 字元 — Unicode 字元需要先進行 UTF-8 編碼,然後再進行百分號編碼
常見問題
encodeURI 和 encodeURIComponent 有什麼不同?
encodeURI 對完整 URL 進行編碼,會跳過 :、/、?、# 等字元。encodeURIComponent 會對除了未保留字元以外的所有字元進行編碼——用它來處理單獨的查詢參數值。
為什麼空格有時變成 + 有時變成 %20?
表單編碼(application/x-www-form-urlencoded)使用 + 表示空格。標準的百分號編碼使用 %20。兩者在不同的上下文中都是有效的。
相關資源
- Base64 編碼解析 — 另一種重要的編碼方案
- JSON API 設計模式 — 建構正確處理編碼的 API
- URL 編碼器/解碼器 — 即時編碼和解碼 URL
- Base64 編碼器 — 以 Base64 格式編碼資料