網址編碼器
對 URL 和特殊字元進行編碼和解碼
如何使用網址編碼器
- 1貼上需要編碼的 URL 或查詢字串。
- 2選擇編碼方式:百分號編碼(URL encode)或解碼。
- 3檢視編碼結果,特殊字元被安全轉義為 %XX 形式。
URL 編碼是什麼?
空格 → %20;中文/特殊字元 → UTF-8 位元組的 %XX 序列URL 只能安全包含少數字符(字母、數字和少數符號)。空格、中文、&、= 等字元在網址中有特殊含義或無法傳輸,必須用百分號編碼轉義為 % 加兩位十六進位制。
編碼後連結才能被正確解析與傳輸,避免參數被截斷或注入。解碼則是逆向過程,把 %XX 還原為原字元。表單提交、API 呼叫與拼接查詢引數時常會用到。
URL 編碼(百分號編碼)把非 ASCII 字元和保留字元轉成 %XX 形式,XX 是該位元組的十六進位制。中文在 UTF-8 下通常是 3 個位元組,所以「中」編碼成 %E4%B8%AD(3 個 %XX)。**關鍵點是:編碼的是位元組而非字元**——同一字元在 UTF-8 和 GBK 下編碼結果完全不同,這也是早期亂碼問題的根源。現代瀏覽器和伺服器統一用 UTF-8。
最容易踩的坑有兩個:① **空格編碼成 %20 還是 +**?在 application/x-www-form-urlencoded(表單 POST)裡空格是 +,在 URL 路徑和查詢串裡是 %20。混用會導致服務端解析出錯。② **多次編碼**:對已編碼的串再編一次,%20 會變成 %2520(% 本身被編成 %25),必須解碼兩次才能還原。**判斷是否需要編碼的標準是:如果字元在 URL 中有特殊語法含義,或不是 ASCII,就必須編碼。**
| 字元 | 編碼 | 含義 | 是否需編碼 |
|---|---|---|---|
| 空格 | %20 | 空格 | 是(+ 亦可) |
| ! | %21 | 感嘆號 | 否 |
| " | %22 | 雙引號 | 是 |
| # | %23 | 片段標識 | 是(會截斷 URL) |
| & | %26 | 引數分隔 | 是(會截斷引數) |
| + | %2B | 加號 | 是(會被解成空格) |
| / | %2F | 路徑分隔 | 視位置而定 |
| : | %3A | 協議分隔 | 視位置而定 |
| = | %3D | 鍵值分隔 | 值中需編碼 |
| ? | %3F | 查詢起始 | 是 |
| 中 | %E4%B8%AD | 中文字元 | 是(UTF-8 三位元組) |
常見字元的 URL 編碼對照
常見問題
為什麼空格變成 %20?
空格不是 URL 安全字元,標準編碼為 %20(也有用 + 表示表單空格的變體)。
中文為什麼要編碼?
URL 基於 ASCII,中文需先按 UTF-8 轉成位元組再逐位元組 %XX 編碼,接收方再解碼還原。
編碼會丟失資訊嗎?
不會。編碼是可逆的,解碼後即可完整還原原始字串。
哪些字元可以不編碼?
URL 規範(RFC 3986)允許的「非保留字元」:字母 A–Z、a–z,數字 0–9,以及 - _ . ~ 這四個符號。這些在任何位置都不需要編碼。其餘字元理論上都應編碼,但實踐中瀏覽器會寬容處理一部分。安全起見,構造 URL 時只保留這 66 個字元原樣,其他一律編碼。
encodeURI 和 encodeURIComponent 有什麼區別?
encodeURI 假設輸入是完整 URL,不會編碼 : / ? # & = 等語法字元;encodeURIComponent 假設輸入是 URL 的一個組成部分(引數值),會把 : / ? # & = 全部編碼。**傳引數值時必須用 encodeURIComponent**,用錯會導致引數被截斷或注入額外引數。例如 value 為 a&b=1 時,用 encodeURI 拼接會變成兩個引數,用 encodeURIComponent 才是正確的一個引數值。
