URL 编码

该文章已生成可运行项目,

URL 编码(也称为百分号编码,Percent-Encoding)是一种在 URL 中传输非 ASCII 字符和保留字符的机制,符合 RFC 3986 标准。


一、为什么需要 URL 编码?

因为 URL 只能包含以下几类字符:

字符类型示例
英文字母A-Za-z
数字0-9
安全字符- _ . ~
保留字符(特殊意义): / ? # [ ] @ & = + $ ,

其他字符(如空格、中文、特殊符号)必须编码后才能出现在 URL 中,以避免语义冲突。


二、URL 编码规则

原始字符编码形式说明
空格%20+application/x-www-form-urlencoded 中是 +
!%21
#%23锚点标识,需编码
%%25百分号本身需编码
+%2B和空格冲突,需编码
/%2F路径分隔符,若用于参数需编码
中文、非 ASCIIUTF-8 后编码如: → UTF-8:E4B8AD%E4%B8%AD

三、示例对比

原始参数编码后 URL 片段
keyword=中 文keyword=%E4%B8%AD%20%E6%96%87
a+b=ca%2Bb=c
a&b=ca%26b=c
123#456123%23456

四、编码与解码:各语言示例

Java

String encoded = URLEncoder.encode("中 文", "UTF-8");  // %E4%B8%AD+%E6%96%87
String decoded = URLDecoder.decode(encoded, "UTF-8"); // 中 文

JavaScript

encodeURIComponent("中 文");   // "%E4%B8%AD%20%E6%96%87"
decodeURIComponent("%E4%B8%AD%20%E6%96%87");

Python

import urllib.parse
urllib.parse.quote("中 文")   # %E4%B8%AD%20%E6%96%87
urllib.parse.unquote('%E4%B8%AD%20%E6%96%87')

五、常见编码函数差异(前端注意!)

函数是否编码空格是否编码 /用途
encodeURI❌(保留空格)编码整个 URL,不编码分隔符
encodeURIComponent%20%2F编码 URL 的参数值部分

六、常见错误与陷阱

错误使用正确做法
中文直接拼到 URL 中使用 UTF-8 编码后再转为 %xx
+ 表示加号+ 要转义为 %2B
忘记对查询参数做编码所有参数值都要 encodeURIComponent()
多次编码造成错误避免重复 encode/decode

七、应用场景

场景是否需要 URL 编码
GET 请求参数✅ 是
POST 表单提交(application/x-www-form-urlencoded)✅ 是(空格转 +
浏览器地址栏直接输入中文浏览器自动编码
JSON 接口、application/json❌ 一般不编码

总结

  • URL 编码是为了解决 URL 中无法直接使用某些字符的问题
  • 参数值使用 encodeURIComponent() 是最安全的方式
  • 中文、空格、特殊符号必须编码成 %XX 格式
  • 多数开发语言提供标准函数支持编码/解码

本文章已经生成可运行项目
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

思静鱼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值