转转转,为了提醒自己,侵删
https://www.cnblogs.com/zhengxl5566/p/10783422.html
URL中的空格有时候被编码成%20,有时候被编码成加号+,曾经迷糊过一段时间,后来查了下资料才搞明白。
一个URL的基本组成部分包括协议(scheme),域名,端口号,路径和查询字符串(路径参数和锚点标记就暂不考虑了)。路径和查询字符串之间用问号?分离。例如http://www.example.com/index?param=1,路径为index,查询字符串(Query String)为param=1。URL中关于空格的编码正是与空格所在位置相关:空格被编码成加号+的情况只会在查询字符串部分出现,而被编码成%20则可以出现在路径和查询字符串中。
造成这种混乱局面的原因在于:W3C标准规定,当Content-Type为application/x-www-form-urlencoded时,URL中查询参数名和参数值中空格要用加号+替代,所以几乎所有使用该规范的浏览器在表单提交后,URL查询参数中空格都会被编成加号+。而在另一份规范(RFC 2396,定义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方法会把加号+和%20都解码为空格,这种违反直觉的做法造成了当初我对空格URL编码问题的困扰。因此后来我的做法都是,在调用URLEncoder.encode对URL进行编码后(所有加号+已被编码成%2B),再调用replaceAll(“\+”, “%20″),将所有加号+替换为%20。
转转转,为了提醒自己,侵删https://www.cnblogs.com/zhengxl5566/p/10783422.htmlURL中的空格有时候被编码成%20,有时候被编码成加号+,曾经迷糊过一段时间,后来查了下资料才搞明白。一个URL的基本组成部分包括协议(scheme),域名,端口号,路径和查询字符串(路径参数和锚点标记就暂不考虑了)。路径和查询字符串之间用问号?分离。例如http://www.example.com/index?param=1,路径为index,查询字符串(Query Str
今天后端问我一个问题,说页面地址参数名后会莫名多出一个%
20
,这样本来页面地址应该是https://h5.t.qingoo.cn/details?bookId=‘对应的书籍id’,但是实际上成了https://h5.t.qingoo.cn/details?bookId=%
20
+‘对应的书籍id’,这样就会使页面访问出错。
URL
里出现%
20
的原因的地址
中
存在的
空格
被转码成了%
20
,所以写一个正则
jdk自带的
URL
编码
工具类
URLEncode
r在对字符串进行URI
编码
的时候,会把
空格
编码
为+号。
空格
的URI
编码
其实是:%
20
搜素引擎上不少人都遇到这个问题,哀声一片。
解决办法大都是对
编码
后的字符串,进行+号替换为%
20
。总感觉这种方式不优雅。
使用spring提供的Ur...
是的,C#
中
的
UrlEncode
方法默认会将
空格
编码
成加号+,这是因为在
URL
中
,
空格
被
编码
成加号+是一种常见的方式。如果你想要将
空格
编码
成%
20
,可以使用
UrlEncode
方法的重载版本,并将
空格
编码
方式指定为Uri.EscapeDataString。例如:
string
encode
d = Uri.EscapeDataString("hello world");
这将会返回"hello%
20
world"。如果你需要对整个
URL
进行
编码
,包括参数部分,可以使用Uri.EscapeUriString方法。例如:
string
encode
d
Url
= Uri.EscapeUriString("http://www.example.com/search?q=hello world");
这将会返回"http://www.example.com/search?q=hello%
20
world"。
另外,如果你需要在生成的JSON内容
中
保留
空格
,可以在将数据转换为JSON格式之前,先将
空格
替换为另一个字符,例如下划线_,然后在将JSON数据解析回来时再将下划线替换回
空格
。