跳至主內容

🔐 URL 編碼器/解碼器

特殊字元編碼為 URL 安全格式,或將編碼的 URL 解碼為原始文字的工具。

📝 輸入文本

✨ 結果

💡 示例

原文:
https://example.com/search?query=헬로 월드&lang=ko
編碼:
https%3A%2F%2Fexample.com%2Fsearch%3Fquery%3D%ED%97%AC%EB%A1%9C%20%EC%9B%94%EB%93%9C%26lang%3Dko

URL編碼將特殊字元轉換為百分號編碼格式,以便在URL中安全傳輸。使用編碼轉換特殊字元,使用解碼還原原始文本。

主要功能

1. URL 編碼(Encode)

將特殊字元、中文、空格等轉換為百分比編碼格式(%XX)。

範例:

原文: https://example.com/search?query=你好世界&lang=zh
編碼: https%3A%2F%2Fexample.com%2Fsearch%3Fquery%3D%E4%BD%A0%E5%A5%BD%E4%B8%96%E7%95%8C%26lang%3Dzh

2. URL 解碼(Decode)

將百分比編碼的 URL 轉換為可讀的原始文字。

範例:

編碼: %E4%BD%A0%E5%A5%BD%E4%B8%96%E7%95%8C
解碼: 你好世界

3. 便利功能

  • 交換文字:快速交換輸入和結果
  • 複製:將結果複製到剪貼簿
  • 重設:一次清除所有輸入

為什麼需要 URL 編碼

安全的 URL 傳輸

URL 中有一些具有特殊意義的字元:

  • / : 路徑分隔符號
  • ? : 查詢開始
  • & : 參數分隔符號
  • = : 鍵值分隔符號
  • # : 片段

要將這些字元作為資料傳輸,需要進行編碼。

中文及多國語言

原文: https://example.com/搜尋?keyword=你好
編碼: https://example.com/%E6%90%9C%E5%B0%8B?keyword=%E4%BD%A0%E5%A5%BD

中文或特殊字元無法直接在 URL 中使用,編碼是必須的。

使用範例

網頁開發

// JavaScript 中生成 URL
const searchQuery = "你好";
const encodedQuery = encodeURIComponent(searchQuery);
const url = `https://api.example.com/search?q=${encodedQuery}`;
// 結果: https://api.example.com/search?q=%E4%BD%A0%E5%A5%BD

API 呼叫

# 原始 URL(無法運作)
GET https://api.example.com/users?name=張三&age=30

# 編碼的 URL(正常運作)
GET https://api.example.com/users?name=%E5%BC%B5%E4%B8%89&age=30

查詢參數

# 包含特殊字元的搜尋詞
原文: 搜尋詞=C++ & Java
編碼: 搜尋詞=C%2B%2B%20%26%20Java

被編碼的字元

總是被編碼的字元

  • 空格: %20
  • 中文/漢字: 每個字元編碼為多個位元組
  • 特殊字元: !, @, #, $, %, ^, &, *, (, ), =, +, [, ], {, }

範例

!   → %21
@ → %40
# → %23
$ → %24
% → %25
& → %26
= → %3D
+ → %2B
空格 → %20

應用案例

🌐 網頁開發

  • 搜尋功能:將使用者輸入轉換為 URL 查詢
  • API 呼叫:GET 請求參數編碼
  • 檔案名稱:處理包含特殊字元的檔案名稱

📧 電子郵件連結

<!-- 包含主旨和內文的 mailto 連結 -->
<a href="mailto:test@example.com?subject=你好&body=諮詢事項">
<!-- 編碼後 -->
<a href="mailto:test@example.com?subject=%E4%BD%A0%E5%A5%BD&body=%E8%AB%AE%E8%A9%A2%E4%BA%8B%E9%A0%85">

🔗 社群媒體分享

// Facebook 分享 URL
https://www.facebook.com/sharer/sharer.php?u=https%3A%2F%2Fexample.com&quote=%E5%A5%BD%E6%96%87%E7%AB%A0

// Twitter 分享 URL
https://twitter.com/intent/tweet?text=%E7%B2%BE%E5%BD%A9%E6%96%B0%E8%81%9E&url=https%3A%2F%2Fexample.com

📊 資料分析

  • 日誌分析:解析網頁伺服器日誌中的編碼 URL
  • 追蹤 URL:解析 Google Analytics 等的參數

提示

什麼時候編碼?

  • 查詢參數值: ?search=需要編碼
  • 中文/特殊字元: name=張三
  • 空格: query=hello world
  • 域名: https://(已經是安全字元)
  • 路徑分隔符號: /api/users(有意的分隔符號)

完整 URL vs 僅參數

// ❌ 錯誤方法:編碼整個 URL
const wrong = encodeURIComponent("https://example.com/search?q=你好");
// 結果: https%3A%2F%2Fexample.com%2Fsearch%3Fq%3D%E4%BD%A0%E5%A5%BD

// ✅ 正確方法:只編碼參數值
const query = encodeURIComponent("你好");
const correct = `https://example.com/search?q=${query}`;
// 結果: https://example.com/search?q=%E4%BD%A0%E5%A5%BD

注意雙重編碼

原文: 你好
第一次編碼: %E4%BD%A0%E5%A5%BD
第二次編碼: %25E4%25BD%25A0%25E5%25A5%25BD

// 不要對同一文字編碼兩次!

各程式語言的使用方法

JavaScript

// 編碼
const encoded = encodeURIComponent("你好");
// 解碼
const decoded = decodeURIComponent(encoded);

Python

from urllib.parse import quote, unquote

# 編碼
encoded = quote("你好")
# 解碼
decoded = unquote(encoded)

Java

import java.net.URLEncoder;
import java.net.URLDecoder;

// 編碼
String encoded = URLEncoder.encode("你好", "UTF-8");
// 解碼
String decoded = URLDecoder.decode(encoded, "UTF-8");

PHP

// 編碼
$encoded = urlencode("你好");
// 解碼
$decoded = urldecode($encoded);

相關工具

常見問題

Q: URL 的哪個部分需要編碼? A: 只需編碼查詢參數的部分。協定(https://)、域名、路徑分隔符號(/)不需要編碼。

Q: 空格為什麼有 %20+ 兩種表示方式? A: %20 可在整個 URL 中使用,+ 只在查詢參數中表示空格。一般來說使用 %20 更安全。

Q: 發生解碼錯誤。 A: 輸入的文字可能不是正確的 URL 編碼格式,或已經是解碼的文字。請再次確認原始編碼的 URL。

Q: 對已編碼的 URL 再次編碼會怎樣? A: 會發生雙重編碼,產生不想要的結果。例如 %20 會變成 %2520。只編碼一次即可。