[踩坑系列]URLEncode中对空格的编码有“+”和“%20”两种
2020年8⽉19⽇更新:
详细RFC⽂档请参考此⽂
URL中的空格有时候被编码成%20,有时候被编码成加号+,曾经迷糊过⼀段时间,后来查了下资料才搞明⽩。
造成这种混乱局⾯的原因在于:,当Content-Type为application/x-www-form-urlencoded时,URL中查询参数名和参数值中空格要⽤加号+替代,所以⼏乎所有使⽤该规范的浏览器在表单提交后,URL查询参数中空格都会被编成加号+。⽽在另⼀份规范(,定义URI)⾥, URI⾥的保留字符都需转义成%HH格式(Section 3.4 Query Component),因此空格会被编码成%20,加号+本⾝也作为保留字⽽被编成%2B,对于某些遵循RFC 2396标准的应⽤来说,它可能不接受查询字符串中出现加号+,认为它是⾮法字符。所以⼀个安全的举措是URL中统⼀使⽤%20来编码空格字符。
Java中的URLEncoder本意是⽤来把字符串编码成application/x-www-form-urlencoded MIME格式字符串,也就是说仅仅适⽤于URL中的查询字符串部分,但是URLEncoder经常被⽤来对URL的其他部分编码,它的encode⽅法会把空格编成加号+,与之对应的是,URLDecoder 的decode⽅法会把加号+和%2
0都解码为空格,这种违反直觉的做法造成了当初我对空格URL编码问题的困扰。因此后来我的做法都是,在调⽤de对URL进⾏编码后(所有加号+已被编码成%2B),再调⽤replaceAll(“\\+”, “%20″),将所有加号+替换为%20。url编码处理
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论