為什麼需要 URL 編碼?
URL(網址)規範(RFC 3986)只允許 ASCII 字元集裡的英數字與特定符號(-_.~ 等)。中文、空格、表情符號、保留字(? # & 等)放進網址時,必須先轉成百分比編碼(percent-encoding)——每個位元組轉成 %XX 兩位 16 進位,瀏覽器與伺服器看到才能正確解析。
例如「楓葉」用 UTF-8 編成 6 個位元組,再轉百分比編碼 → %E6%A5%93%E8%91%89。不編碼直接放進 URL,有些舊伺服器會回 400 Bad Request,或解析成亂碼。
常見使用情境
- 中文查詢參數:Google 搜尋「楓葉工具箱」,網址列實際是
q=%E6%A5%93%E8%91%89... - 分享 PTT / 巴哈文章:含中文標題的網址要先 encode 才能貼到 LINE / Discord
- API query string:把用戶輸入塞進 query 前必須 encode,避免
&被誤判為參數分隔 - 反向 decode log:從 server log 看到一串
%XX,貼回來 decode 看原始查詢 - 生成 mailto: 連結:含中文主旨 / 內文時必須 encode
encodeURI vs encodeURIComponent
JavaScript 有兩個 URL 編碼函式,編碼範圍不同:
- encodeURI:保留 URL 結構字元(
:/?&=#)。適合對「完整網址」編碼,不會破壞結構 - encodeURIComponent:把所有結構字元也 encode,適合對「單一參數值」編碼。例如把 URL 嵌進另一個 URL 的參數時用
本工具預設用 encodeURI,保留結構。如果你的字串會成為「query string 的某個值」,請改用 encodeURIComponent(程式碼裡直接呼叫即可)。
編碼字元對照
- 空格:
%20(標準),有時也用+(form 編碼) - 中文字:UTF-8 通常 3 個位元組 / 字,例如「楓」→
%E6%A5%93 - Emoji:UTF-8 可達 4 個位元組,例如「🍁」→
%F0%9F%8D%81 - 常見符號:
&→%26、=→%3D、?→%3F、#→%23
常見問題
為什麼有時候空格是 + 不是 %20?
兩種編碼都常見,語意略不同:application/x-www-form-urlencoded(form 提交)會把空格編成 +,URL path 與 query 多用 %20。現代 API 兩種都接受,但對應的 decode 函式不同(decodeURIComponent 不會把 + 還原成空格)。
為什麼解碼後是亂碼?
URL 編碼只規範「位元組怎麼表示」,不規範「位元組對應什麼字元集」。如果原本是 Big5 編碼的字元被 percent-encode,用 UTF-8 解就會亂碼。本工具預設 UTF-8,99% 情境正確,極少數老系統可能還用 Big5。
百分比編碼有長度上限嗎?
URL 規範本身沒長度上限,但瀏覽器與伺服器各有實作限制:Chrome ~2 MB、IE 2083、Apache 預設 8190、nginx 預設 8192。一般 query string 控制在 2KB 內最保險。
相關工具
- Base64 編碼解碼
文字 ↔ Base64 雙向編碼解碼,完整支援 UTF-8 中文與特殊字元。
- JSON 格式化
JSON 美化與壓縮雙向轉換,支援 2 / 4 / Tab 縮排,語法錯誤即時標出行號。
- QR Code 產生器
把文字、網址、Wi-Fi 連線資訊(SSID 帳密)轉成 QR Code,支援下載 SVG 向量…
- JWT Decode 解碼
貼上 JSON Web Token 立即解碼 header 與 payload,過期時間(exp…
- Regex 正規表示式測試
輸入 regex pattern 與測試文字,即時標出所有匹配結果、捕獲分組與位置,支援 g、i、m、s、u、y 旗標。
- 雜湊計算
計算文字與檔案的 SHA-1、SHA-256、SHA-384、SHA-512 雜湊值,走瀏覽器原…
