百分比編碼是什麼
網址只能直接使用一小組字元。RFC 3986 第 2.3 節把 A–Z、a–z、0–9 和 -、.、_、~ 定為「不保留字元」,這些可以原樣出現。
其他字元要先轉成 UTF-8 位元組,每個位元組寫成 %XX。例如「台」的 UTF-8 是三個位元組 E5 8F B0,編碼後是 %E5%8F%B0。
另有一組「保留字元」,例如 ?、&、=、/、#。它們在網址裡有結構上的意義:? 開始查詢字串,& 分隔參數,= 分開名稱與值。如果這些字元是「資料」而不是「結構」,就必須編碼。例如搜尋字詞裡的 & 要寫成 %26。
URL 編碼和 Base64 一樣只是改寫方式,不是加密。任何人都能還原。
使用情境
- 組 API 或搜尋網址。 查詢參數的值有中文、空白、
&或=時,要先編碼,否則伺服器會切錯參數。 - 看懂分享連結或後台記錄裡的 `%E5...`。 從瀏覽器複製網址、看伺服器日誌、看 UTM 參數時,中文常變成一長串百分比編碼。解碼後才看得懂。
- 除錯「網址參數收到的值不對」。 例如收到的值被截斷、
+變空白、%出現兩次。把原始網址貼進來解碼,就能看出是哪一段沒編碼或編碼了兩次。
範例
| 輸入 | 輸出 |
|---|---|
台北 咖啡&甜點(整段當成一個參數值) | %E5%8F%B0%E5%8C%97%20%E5%92%96%E5%95%A1%26%E7%94%9C%E9%BB%9E |
同上,用表單格式(空白寫成 +) | %E5%8F%B0%E5%8C%97+%E5%92%96%E5%95%A1%26%E7%94%9C%E9%BB%9E |
解碼 %E5%8F%B0%E5%8C%97 | 台北 |
組成完整網址:搜尋「咖啡&甜點=好吃」時,正確寫法是
https://example.com/search?q=%E5%92%96%E5%95%A1%26%E7%94%9C%E9%BB%9E%3D%E5%A5%BD%E5%90%83。
& 和 = 都被編碼了,所以伺服器只會看到一個參數 q。
常見錯誤
- 整條網址一起編碼。 把
https://的:和/也編碼,網址就壞了。只編碼「放進去的值」,不要編碼網址的骨架。JavaScript 裡,參數值用encodeURIComponent()。 - 重複編碼。 已經編碼過的
%20再編碼一次,會變成%2520(%本身被寫成%25)。看到%25連續出現,多半是編碼了兩次。 - 把 `+` 當成空白,或反過來。 表單格式(
application/x-www-form-urlencoded)把空白寫成+,解碼時+還原成空白。一般的百分比編碼則把空白寫成%20,+就是加號。如果參數值本來就有+(例如電話+886),要寫成%2B。 - 用 Big5 等舊編碼。 現代網址標準用 UTF-8。用 Big5 編碼的中文,在 UTF-8 系統解碼會變亂碼。本工具一律用 UTF-8。
- 以為 URL 編碼能隱藏內容。
%E5%AF%86%E7%A2%BC一解就是「密碼」。不要把密碼或金鑰放進網址,網址會留在瀏覽紀錄與伺服器日誌裡。
常見問題(FAQ)
- URL 編碼和百分比編碼是同一件事嗎?
- 是。正式名稱是百分比編碼(percent-encoding),定義在 RFC 3986 第 2.1 節。因為用在網址上,一般也叫 URL 編碼。
- 空白應該編成
%20還是+? - 看用途。放在網址路徑或一般參數,用
%20最保險。HTML 表單送出的查詢字串用+。本工具兩種都提供,預設是%20。 - 為什麼一個中文字會變成 9 個字元?
- 常用中文字在 UTF-8 佔 3 個位元組。每個位元組寫成
%XX,3 個位元組就是 9 個字元,例如「台」是%E5%8F%B0。 encodeURI和encodeURIComponent差在哪?encodeURI()用在完整網址,不會編碼/、?、&、=這些結構字元。encodeURIComponent()用在單一參數值,會把這些字元都編碼。組查詢參數時要用後者。本工具的編碼模式等同encodeURIComponent()。- 我貼上的網址會被送出去嗎?
- 不會。編碼與解碼都在你的瀏覽器裡計算,資料不會送到伺服器,本工具也不會開啟你貼上的網址。
來源(查核日期 2026-10-21)
- RFC 3986〈URI Generic Syntax〉第 2.1 節(百分比編碼)、第 2.2 節(保留字元)、第 2.3 節(不保留字元):https://www.rfc-editor.org/rfc/rfc3986
- WHATWG URL Standard,
application/x-www-form-urlencoded解析:把+(0x2B)換成空白:https://url.spec.whatwg.org/ - MDN〈encodeURIComponent()〉:用 UTF-8 轉成跳脫序列:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/encodeURIComponent