URL編碼是怎麼回事
網址裡只能使用不帶重音的字母、數字和少數符號,其他字元都會被編碼。在 UTF-8 中,中 由 E4、B8、AD 三個位元組組成,所以變成 %E4%B8%AD。空白是 %20,在表單裡則是 +。
編碼後
%E5%8F%B0%E5%8C%97%E7%89%9B%E8%82%89%E9%BA%B5
還原後
台北牛肉麵
常見的URL編碼
%E4%B8%AD= 中,%E6%96%87= 文,%E5%AD%97= 字,%E7%A2%BC= 碼%E4%BA%82%E7%A2%BC= 亂碼,%E5%8F%B0%E5%8C%97= 台北,%E6%BC%A2%E5%AD%97= 漢字%EF%BC%8C= ,,%E3%80%82= 。,%E3%80%81= 、,%EF%BC%9A= :%20= 空白,%2F= /,%3F= ?,%26= &,%25= %
一個中文字在 UTF-8 裡通常是 3 個位元組,所以會變成 9 個字元的代碼。常用字多半以 %E4 到 %E9 開頭,全形標點則常以 %E3%80 或 %EF%BC 開頭,一看就知道是中文。舊網站也常見 Big5 代碼:%BBO%A5%5F%A5%AB 就是「臺北市」,Mojibuster 也能辨認並還原。
URL編碼的文字從哪裡來
- 複製的連結: 瀏覽器會把中文網址顯示成看得懂的樣子,但複製後常常貼成
%E5%8F%B0%E5%8C%97。 - 表單和流量統計: 搜尋字詞和 UTM 參數在伺服器日誌和統計匯出檔裡維持編碼狀態,例如
?q=%E7%89%9B%E8%82%89%E9%BA%B5。 - 匯出檔和 API: 有些電子報工具、Webhook 和 API 會把值編碼後儲存,於是 Excel 或 CSV 裡出現的是代碼,而不是名字。
- 檔名: 伺服器沒有解碼檔名時,下載的檔案會叫
%E5%90%88%E7%B4%84.pdf這樣的名字。
編碼和亂碼同時出現
有時文字被破壞了兩次:%C2%B6%C3%83%C2%BDX 是 亂碼 的 Big5 位元組被誤讀成西歐字元後產生的亂碼,再被 URL 編碼的結果。Mojibuster 先解開編碼,再修復 Big5 亂碼,最後得到 亂碼。
本頁已經勾選 同時轉換編碼字元。HTML 字元參照(中)、郵件編碼(=E4=B8=AD)和程式裡的跳脫碼(\u4e2d)也會一併轉換。其他亂碼問題請見亂碼是什麼。
在 Excel、JavaScript、Python 和 PHP 中自己解碼
- Excel: 只有編碼函數(英文版為
ENCODEURL),沒有解碼函數。最簡單的辦法是複製整欄,貼到這裡,再把結果複製回去。另見 Excel 亂碼。 - JavaScript:
decodeURIComponent("%E4%B8%AD")會得到中。 - Python:
urllib.parse.unquote("%E4%B8%AD");表單裡的+要當作空白時用unquote_plus。 - PHP:
rawurldecode(),表單資料用urldecode()。
常見問題
%E4%B8%AD 是什麼意思?
它是 中 的 URL 編碼:UTF-8 的三個位元組 E4、B8、AD,每個前面加一個 %。同理,%E6%96%87 是 文。
%20 是什麼意思?
空白。表單資料裡常用 + 代替。一般文字裡的 + 可能是真正的加號,所以 Mojibuster 會保留它。
我的連結會被上傳嗎?
不會。轉換完全在瀏覽器中進行。含有權杖、電子郵件地址或其他個人資料的連結也不會離開你的裝置。
為什麼「100%」沒有被更動?
Mojibuster 只轉換能變成真正特殊字元的序列。100%、50 % 或一般文字裡單獨的 %20 都會維持原樣。