# URL 编码和解码

URL: https://shahid09.is-a.dev/zh/tools/url-encoder-decoder/
Author: Muhammad Shahid (https://shahid09.is-a.dev/)
免费工具 · 在浏览器中运行

把文本编码后安全地放进网址，把百分号编码的文本还原，并列出查询字符串中的参数。

**快速解答:** 网址只能包含部分字符，其他字符要写成百分号编码：空格变成 %20，& 变成 %26，汉字会转换为 UTF-8 字节，例如“中”变成 %E4%B8%AD。对单个值（例如搜索词或参数）请用编码；勾选整个 URL 则会保留 : / ? & =。解码会把它还原为可读文字。

## 使用方法

1. **选择编码或解码.** 编码让文本可以安全用于网址；解码把 % 编码还原为文字。
2. **粘贴文本或网址.** 参数值、完整链接或日志中的编码字符串都可以。
3. **复制结果.** 如果输入的是链接，还会列出其中的查询参数。

## 示例

把一个查询字符串作为单个值编码：

输入:

```
name=Sara Levi&city=Tel Aviv
```

输出:

```
name%3DSara%20Levi%26city%3DTel%20Aviv
```

## 常见错误及解决方法

- **URIError: URI malformed**: 有一个 % 后面不是两位十六进制数字，或者编码不是有效的 UTF-8。% 本身请编码为 %25。
- **解码后空格显示为 +**: 表单数据把空格写成 +。请勾选“把 + 当作空格”，或使用会自动处理的 URLSearchParams。
- **链接中出现 %2520**: 值被编码了两次。每个值只在加入网址前编码一次。
- **& 后面的参数丢失了**: 值中包含未编码的 & 或 #。请用 encodeURIComponent 编码每个值，而不是用 encodeURI 编码整个网址。

## 常见问题

### 什么是 URL 编码？

把网址中不允许出现或有特殊含义的字符写成 % 加两位十六进制数字，例如空格写成 %20。

### encodeURIComponent 和 encodeURI 有什么区别？

encodeURIComponent 会编码所有有特殊含义的字符，包括 / ? & 和 =，适合单个值；encodeURI 保留这些字符，让整个网址仍然可用。本工具默认使用 encodeURIComponent，勾选“整个 URL”时使用 encodeURI。

### 空格应该编码成 %20 还是 +？

在路径中空格是 %20；在表单数据和很多查询字符串中，+ 也表示空格。解码表单数据时请勾选“把 + 当作空格”。

### 为什么链接在 & 或 # 处被截断？

这些字符会结束一个参数或开始一个片段。用 encodeURIComponent 编码每个值，& 会变成 %26，# 变成 %23。

### %2520 是什么意思？

文本被编码了两次：%20 又被编码成了 %2520。再解码一次，并修复重复编码的代码。

### 中文在网址里怎么编码？

每个汉字先转为 UTF-8 字节（通常 3 个字节），每个字节写成 %XX。例如“中”是 %E4%B8%AD。浏览器地址栏通常显示中文，但实际发送的是编码后的版本。

### JavaScript 中怎么编码 URL？

单个参数用 encodeURIComponent(value)，构建查询字符串可以用 new URLSearchParams({ q: value }).toString()。

### Python 中怎么编码 URL？

路径部分用 urllib.parse.quote(value)，查询字符串用 urllib.parse.urlencode({"q": value})。

### URL 编码和 Base64 一样吗？

不一样。百分号编码只替换不安全的字符；Base64 会用 64 个字符重写全部数据。

### 我的数据会被发送出去吗？

不会。编码和解码都在你的浏览器中完成。

## 相关内容

- [Base64 编码解码](https://shahid09.is-a.dev/zh/tools/base64-encoder-decoder/)
- [WhatsApp 链接生成器](https://shahid09.is-a.dev/zh/tools/whatsapp-link-generator/)
- [JSON 格式化和校验](https://shahid09.is-a.dev/zh/tools/json-formatter/)
