tools / url
url/
URL 編碼 / 解碼,以及把完整 URL 拆成各個部分和查詢參數表。
原文
編碼結果
解析 URL
查詢參數
| 鍵 | 值 |
|---|
常見問題
encodeURIComponent 和 encodeURI 有什麼差別,該選哪個
編碼參數值或某一段路徑用 encodeURIComponent,編碼整條網址用 encodeURI。前者會把 : / ? & = # 這些有特殊含義的符號也轉成 %XX,所以只能用在其中一段;後者保留這些符號,網址結構不會被破壞,但參數值裡的 & 和 = 它不會處理。字母、數字和 - _ . ! ~ * ' ( ) 兩者都不編碼。
空白為什麼變成 %20,解碼時 + 會變成空白嗎
這裡的編碼把空白寫成 %20,不是 +。解碼框裡的 + 會原樣保留,不會變成空白,因為 decodeURIComponent 不做這個轉換;只有下方「解析 URL」的查詢參數表依表單規則把 + 當成空白。要解碼表單送出產生的 a+b,請先手動把 + 換成空白再解碼。
解碼顯示「不是合法的 UTF-8 編碼序列」怎麼辦
這串 %XX 不是 UTF-8 編碼的。最常見的是舊網站用 GBK 編碼的中文,例如 %D6%D0;本工具和瀏覽器的 decodeURIComponent 一樣只認 UTF-8,會顯示錯誤並指出出錯的位置。GBK 的內容可以用支援 GBK 的工具轉換,例如 Python 的 unquote(s, encoding='gbk')。如果是複製時被截斷,例如 %E4%B8 少了最後一個位元組,也會出現這個錯誤。
解碼顯示「% 後面不是兩位十六進位數字」怎麼辦
文字裡有一個沒有編碼的百分號,例如 100% 或 50%off。百分號是 URL 編碼的跳脫起點,後面必須接兩位十六進位數字。把那個 % 改寫成 %25 再解碼;提示裡會標明它是第幾個字元。
解碼後還是一堆 %XX 怎麼辦
多半是被編碼了兩次,例如 %2520 解碼一次會得到 %20。再解碼一次就行:點選「⇄ 結果當作輸入」把結果放回輸入框,然後再點一次「解碼」。
和 PHP、Python、Java 的 URL 編碼結果一樣嗎
大致相同,細節上有差異。encodeURIComponent 接近 PHP 的 rawurlencode 和 Python 的 urllib.parse.quote(s, safe=''),差別是它不編碼 ! ' ( ) *。Java 的 URLEncoder 和 PHP 的 urlencode 會把空白寫成 +,這裡是 %20。與其他系統串接時,請以接收方實際的解碼規則為準。
「解析 URL」顯示缺少通訊協定,或是結果和我輸入的不一樣
解析需要完整的 URL,開頭要有 https:// 這樣的通訊協定,只寫網域或路徑會顯示錯誤。結果來自瀏覽器內建的 URL 解析,所以會被標準化:網域轉成小寫,沒寫連接埠或寫了預設連接埠時顯示「(預設連接埠)」,路徑裡的中文顯示成 %XX,並多提供一行解碼後的路徑。查詢參數表裡的鍵和值都是已解碼的。
輸入的網址會傳送到伺服器嗎
不會。編碼、解碼和解析都在瀏覽器裡完成,網址裡帶的 token、手機號碼這類參數也不會離開你的瀏覽器。