URL 编码又叫百分号编码(Percent-Encoding),定义在 RFC 3986 中:把 URL 里不允许直接出现的字符先转成 UTF-8 字节,再把每个字节写成“%”加两位十六进制数,例如空格写成 %20,“中”写成 %E4%B8%AD。下面重点说明标准库写法。
用 Python 处理 URL编码
下面是 Python 中处理URL编码的常用写法:
from urllib.parse import quote, quote_plus, urlencode
quote("123问 a&b", safe="") # 123%E9%97%AE%20a%26b
quote_plus("a b") # a+b
urlencode({"q": "测试", "p": 1}) # q=%E6%B5%8B%E8%AF%95&p=1运行前确认输入的字符集(推荐 UTF-8),结果可以用本站工具交叉核对。
示例
输入:123问
编码结果:123%E9%97%AE
说明:按 RFC 3986 编码,空格为 %20,中文按 UTF-8。
常见用途
- 拼接带中文或特殊字符的查询参数
- 表单 GET/POST 提交(x-www-form-urlencoded)
- 把一个网址作为另一个网址的参数(如回调地址 redirect_uri)
- API 签名前对参数做规范化编码
Go 示例
下面是 Go 中处理URL编码的常用写法:
import "net/url"
url.PathEscape("123问 a&b") // 123%E9%97%AE%20a&b(路径段,保留 &)
url.QueryEscape("a b&c") // a+b%26c(查询参数)运行前确认输入的字符集(推荐 UTF-8),结果可以用本站工具交叉核对。
本站的URL编码解码工具可以直接处理,计算在浏览器本地完成,适合快速核对结果。
常见问题
【空格应该编码成 %20 还是 +?】路径和 RFC 3986 规范里用 %20;表单格式(x-www-form-urlencoded)用“+”。不确定时用 %20 更安全。
【为什么中文变成了三组 %XX?】中文按 UTF-8 编码,常用汉字占 3 个字节,每个字节写成一个 %XX。
【URL 编码能防止 XSS 吗?】不能完全防止。URL 编码只解决网址格式问题,输出到网页时还需要做 HTML 转义。
文中示例可以在本站对应工具中验证;处理密钥、证书等敏感数据时,请注意保护隐私。