转转转,为了提醒自己,侵删
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数据解析回来时再将下划线替换回 空格