跳转到主内容

🔐 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%20%E4%B8%96%E7%95%8C%26lang%3Dzh

2. URL解码 (Decode)

将百分号编码的URL转换为可读的原始文本。

示例:

编码: %E4%BD%A0%E5%A5%BD%20%E4%B8%96%E7%95%8C
解码: 你好 世界

3. 便捷功能

  • 交换文本: 快速交换输入和结果
  • 复制: 将结果复制到剪贴板
  • 清空: 一次清空所有输入

为什么需要URL编码

安全的URL传输

URL中有具有特殊含义的字符:

  • / : 路径分隔符
  • ? : 查询开始
  • & : 参数分隔符
  • = : 键值分隔符
  • # : 片段

要将这些字符作为数据传输,需要进行编码。

中文及多语言

原始: https://example.com/搜索?keyword=你好
编码: https://example.com/%E6%90%9C%E7%B4%A2?keyword=%E4%BD%A0%E5%A5%BD

中文或特殊字符不能直接在URL中使用,因此编码是必需的。

使用示例

Web开发

// 在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%A0%E4%B8%89&age=30

查询参数

# 包含特殊字符的搜索词
原始: 搜索=C++ & Java
编码: 搜索=C%2B%2B%20%26%20Java

被编码的字符

始终被编码的字符

  • 空格: %20
  • 中文/汉字: 每个字符编码为多个字节
  • 特殊字符: !, @, #, $, %, ^, &, *, (, ), =, +, [, ], {, }

示例

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

应用场景

🌐 Web开发

  • 搜索功能: 将用户输入转换为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=%E5%92%A8%E8%AF%A2%E4%BA%8B%E9%A1%B9">

🔗 社交媒体分享

// 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%E9%97%BB&url=https%3A%2F%2Fexample.com

📊 数据分析

  • 日志分析: 解析Web服务器日志中的编码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。只编码一次即可。