URL 編碼完全指南:什麼時候需要 URL Encode?
什麼是 URL 編碼?
URL 編碼(URL Encoding),也稱為百分比編碼(Percent-encoding),是一種將特殊字元轉換為可以安全傳輸的格式的機制。根據 RFC 3986 標準,URL 中只能包含特定的 ASCII 字元,其他字元(包括中文、空格、特殊符號等)必須經過編碼才能安全地包含在 URL 中。
編碼的方式是將字元轉換為 % 加上兩位十六進位數字的形式。例如,空格被編碼為 %20,中文字「你」被編碼為 %E4%BD%A0。
為什麼需要 URL 編碼?
URL 的結構
一個標準的 URL 由多個部分組成:
https://example.com:8080/path/to/page?key=value&name=test#section
|_____| |___________|____| |_________| |________________| |______|
協議 主機名 埠號 路徑 查詢參數 片段
https://example.com:8080/path/to/page?key=value&name=test#section
|_____| |___________|____| |_________| |________________| |______|
協議 主機名 埠號 路徑 查詢參數 片段
URL 中的某些字元具有特殊含義(如 ?、&、=、#、/),如果數據中包含這些字元,就必須進行編碼,否則會破壞 URL 的結構。
常見需要編碼的場景
| 場景 | 說明 | 範例 |
|---|---|---|
| 中文參數 | URL 中包含中文字元 | ?name=你好 → ?name=%E4%BD%A0%E5%A5%BD |
| 空格 | 參數值包含空格 | ?q=hello world → ?q=hello%20world |
| 特殊符號 | 參數值包含 &、= 等 | ?code=a&b → ?code=a%26b |
| API 請求 | 傳遞複雜的查詢參數 | JSON 字串作為參數 |
| 重導向 URL | URL 作為另一個 URL 的參數 | ?redirect=https%3A%2F%2F... |
URL 編碼對照表
以下是常見字元的 URL 編碼對照:
| 字元 | 編碼 | 說明 |
|---|---|---|
| 空格 | %20 或 + | 查詢字串中常用 + |
! | %21 | 驚嘆號 |
# | %23 | 井號(片段標識符) |
$ | %24 | 美元符號 |
% | %25 | 百分號本身 |
& | %26 | 和號(參數分隔符) |
+ | %2B | 加號 |
/ | %2F | 斜線(路徑分隔符) |
: | %3A | 冒號 |
= | %3D | 等號(鍵值分隔符) |
? | %3F | 問號(查詢字串開始) |
@ | %40 | At 符號 |
JavaScript 中的 URL 編碼函數
JavaScript 提供了多個 URL 編碼相關的函數,它們的行為略有不同:
encodeURI vs encodeURIComponent
| 函數 | 用途 | 不編碼的字元 |
|---|---|---|
encodeURI() | 編碼完整 URL | A-Z a-z 0-9 ; , / ? : @ & = + $ - _ . ! ~ * ' ( ) # |
encodeURIComponent() | 編碼 URL 組件(參數值) | A-Z a-z 0-9 - _ . ! ~ * ' ( ) |
重要區別:encodeURI() 不會編碼 URL 結構字元(如 /、?、&),適合編碼完整 URL;encodeURIComponent() 會編碼這些字元,適合編碼 URL 的參數值。
使用範例
// 編碼完整 URL
encodeURI("https://example.com/搜尋?q=你好 世界")
// → "https://example.com/%E6%90%9C%E5%B0%8B?q=%E4%BD%A0%E5%A5%BD%20%E4%B8%96%E7%95%8C"
// 編碼參數值
const value = "hello&world=test";
const url = `https://example.com?q=${encodeURIComponent(value)}`;
// → "https://example.com?q=hello%26world%3Dtest"
// 編碼完整 URL
encodeURI("https://example.com/搜尋?q=你好 世界")
// → "https://example.com/%E6%90%9C%E5%B0%8B?q=%E4%BD%A0%E5%A5%BD%20%E4%B8%96%E7%95%8C"
// 編碼參數值
const value = "hello&world=test";
const url = `https://example.com?q=${encodeURIComponent(value)}`;
// → "https://example.com?q=hello%26world%3Dtest"
您可以使用我們的URL 編碼/解碼器 [blocked]快速測試這些編碼結果。
Base64 編碼 vs URL 編碼
| 特性 | URL 編碼 | Base64 編碼 |
|---|---|---|
| 用途 | URL 中的特殊字元 | 二進位數據轉文字 |
| 格式 | %XX | A-Za-z0-9+/= |
| 大小增長 | 每個特殊字元增長 3 倍 | 固定增長約 33% |
| 可讀性 | 部分可讀 | 完全不可讀 |
我們的URL 編碼工具 [blocked]同時支援 URL 編碼和 Base64 編碼,方便您根據需求選擇合適的編碼方式。
常見問題(FAQ)
URL 編碼和 HTML 實體編碼有什麼區別?
URL 編碼使用 %XX 格式,用於 URL 中的特殊字元。HTML 實體編碼使用 &name; 或 &#number; 格式,用於 HTML 文件中的特殊字元。兩者的用途和格式完全不同。
為什麼有時候看到 + 代替 %20?
在 application/x-www-form-urlencoded 格式(HTML 表單提交)中,空格被編碼為 +。在標準的 URL 編碼(RFC 3986)中,空格被編碼為 %20。兩種方式在不同的上下文中都是正確的。
中文字元需要幾個 %XX?
中文字元使用 UTF-8 編碼時,通常需要 3 個 %XX。例如,「你」的 UTF-8 編碼是 E4 BD A0,URL 編碼後為 %E4%BD%A0。
什麼時候不需要 URL 編碼?
如果 URL 中只包含 ASCII 字母、數字和少數安全字元(-、_、.、~),則不需要編碼。_
相關工具推薦
- URL 編碼/解碼器 [blocked]:快速進行 URL 編碼和解碼
- JSON 格式化工具 [blocked]:格式化 API 回應中的 JSON 數據
- Hash 計算器 [blocked]:計算字串的 Hash 值
- 正則表達式測試器 [blocked]:驗證 URL 格式的正則表達式
立即使用我們的免費 URL 編碼工具 [blocked],快速完成 URL 編碼和解碼!



