跳到主要內容
楓葉工具箱 ToolMaple

URL 編碼解碼

中文與特殊字元 ↔ URL 百分比編碼(percent-encoding)雙向轉換工具,支援 encodeURI 與 encodeURIComponent 兩種模式。從 server log 看到亂碼網址反向 decode 查原意,或把中文網址 encode 後安全傳遞給後端 API、QR Code 或分享連結。

結果
https://www.toolmaple.com/?q=%E6%A5%93%E8%91%89%E5%B7%A5%E5%85%B7%E7%AE%B1&page=1

為什麼需要 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 內最保險。

相關工具