在一个URL,应使用空格%20或+编码? [重复](In a URL, should space

2019-06-17 20:44发布

这个问题已经在这里有一个答案:

  • URL编码的空格字符:+或20%? 4个回答

在一个网址,我应该使用编码的空间%20+ ? 例如,在下面的例子中,哪一个是正确的?

www.mydomain.com?type=xbox%20360
www.mydomain.com?type=xbox+360

我公司是偏向于前者,但使用Java方法URLEncoder.encode(String, String)"xbox 360" (和"UTF-8" ) 返回后者 。

那么,有什么区别?

Answer 1:

形式的数据(GET或POST)通常被编码为application/x-www-form-urlencoded :此指定+空格。

URL被编码为RFC 1738指定%20

从理论上讲,我认为你之前应该有20% ? 和+后:

example.com/foo%20bar?foo+bar


Answer 2:

根据W3C (和它们在这些东西的官方源),在查询字符串一个空格字符(和在查询字符串只)可以被编码为“ %20 ”或“ + ”。 从在“建议”小节“查询字符串”:

在查询字符串,加号被保留为一个空间速记符号。 因此,真正的加号必须被编码。 用这种方法,使查询更方便的URI中不允许空间系统通过。

根据第3.4 RFC2396这是对一般的URI的正式规范,“查询”部分是URL相关:

3.4。 查询组件查询组件是一个信息串由资源进行解释。

  query = *uric 

中的查询部件,字符 “;”, “/”, “:”, “@”, “&”, “=”, “+”, “”,和 “$” 被保留 “?”。

因此,在其他软件中的错误,如果它不接受经编码为“查询字符串空格的URL + ”字。

至于你的问题的第三部分,一个方法(虽然略有丑陋的),以解决从输出URLEncoder.encode()是那么叫 replaceAll("\\+","%20")的返回值。



Answer 3:

这种混乱是因为URL仍然是“破”的这一天

以“ http://www.google.com ”的实例。 这是一个URL。 URL是统一资源定位符,是一个真正的指向一个网页(在大多数情况下)。 网址居然有自1994年第一次规范非常明确的结构。

我们可以提取有关“的详细信息http://www.google.com ”网址:

+---------------+-------------------+   
|      Part     |      Data         |   
+---------------+-------------------+   
|  Scheme       | http              |   
|  Host address | www.google.com    |   
+---------------+-------------------+  

如果我们来看一个更复杂的URL,例如“ https://开头鲍勃:bobby@www.lunatech.com:8080 /文件; P = 1,Q = 2#第三 ”我们可以提取如下信息:

+-------------------+---------------------+
|        Part       |       Data          |
+-------------------+---------------------+
|  Scheme           | https               |
|  User             | bob                 |
|  Password         | bobby               |
|  Host address     | www.lunatech.com    |
|  Port             | 8080                |
|  Path             | /file               |
|  Path parameters  | p=1                 |
|  Query parameters | q=2                 |
|  Fragment         | third               |
+-------------------+---------------------+

保留的字符是对于每个部分不同

对于HTTP的URL,在一个路径片段部分的空间必须被编码为“%20”(未,绝对不是“+”),而在路径片段部分中的“+”字符可以保留未编码。

现在,在查询部分,空间可以被编码以任一“+”(为了向后兼容:不要试图在URI标准来搜索它)或“%20”,而“+”字符(如这种不确定性的结果)必须逃到“%2B”。

这意味着,“蓝色+浅蓝色”串必须被在路径和查询部件不同编码:“ http://example.com/blue+light%20blue?blue%2Blight+blue ”。 从那里,你可以推断出编码完全构造URL不URL结构的语法意识是不可能的。

这是什么归结为是

你应该有%20? +

资源



Answer 4:

不应该的问题,任何比,如果你编码的字母A为41%以上。

但是,如果你处理不承认一种形式的系统,它好像你只是将不得不给它什么,它预计,无论什么“规范”说。



Answer 5:

您可以使用 - 这意味着大多数人选择“+”,因为它更可读。



Answer 6:

当编码查询值,任一种形式,再加上或百分比-20,是有效的; 然而,由于互联网的带宽不是无限的,你应该使用加,因为它是少两个字节。



文章来源: In a URL, should spaces be encoded using %20 or +? [duplicate]