java encode 空格_URL中存在空格encode编码问题

本文探讨了URL编码时空格被编码为`%20`和`+`的现象,解释了其原因在于不同规范的冲突。W3C标准规定查询字符串中的空格应编码为`+`,而RFC 2396建议编码为`%20`。Java的`URLEncoder.encode`方法可能导致混淆,建议在编码后替换所有`+`为`%20`以确保兼容性。提供了一个示例方法`urlEncodeURL`用于正确处理URL编码。
摘要由CSDN通过智能技术生成

Loading...

## 问题

在对URL进行encode编码的时候,URL中的空格有时候被编码成`%20`,有时候被编码成加号`+`。大多数情况下,这两种编码都可以工作,但个别情况下,编码为`+`的URL存在问题,并不能正常访问。

## 原因

一个URL的基本组成部分包括协议(scheme),域名,端口号,路径和查询字符串(路径参数和锚点标记就暂不考虑了)。路径和查询字符串之间用问号?分离。

例如`http://www.example.com/index?param=1`,路径为`index`,查询字符串(Query String)为`param=1`。

以上例子中URL中关于空格的编码正是与空格所在位置相关:空格被编码成加号+的情况只会在查询字符串部分出现,而被编码成%20则可以出现在路径和查询字符串中。

造成这种混乱局面的原因在于:[W3C标准规定](http://www.w3.org/TR/html4/interact/forms.html#h-17.13.4.1),当`Content-Type`为`application/x-www-form-urlencoded`时,URL中查询参数名和参数值中空格要用加号+替代,所以几乎所有使用该规范的浏览器在表单提交后,URL查询参数中空格都会被编成加号`+`。

而在另一份

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值