alltools.one
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'

常見錯誤

  1. 重複編碼 — 對已編碼的 URL 再次編碼,會將 %20 變成 %2520
  2. 使用 encodeURI 而非 encodeURIComponentencodeURI 會跳過查詢值中重要的保留字元
  3. 未編碼 + — 在 URL 中,+ 可以代表空格。字面的加號必須編碼為 %2B
  4. 忽略非 ASCII 字元 — Unicode 字元需要先進行 UTF-8 編碼,然後再進行百分號編碼

常見問題

encodeURI 和 encodeURIComponent 有什麼不同?

encodeURI 對完整 URL 進行編碼,會跳過 :/?# 等字元。encodeURIComponent 會對除了未保留字元以外的所有字元進行編碼——用它來處理單獨的查詢參數值。

為什麼空格有時變成 + 有時變成 %20?

表單編碼(application/x-www-form-urlencoded)使用 + 表示空格。標準的百分號編碼使用 %20。兩者在不同的上下文中都是有效的。

相關資源

Published on 2026-02-12
URL Encoding Guide: Why and How to Encode URLs | alltools.one