Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在URL中,是否应使用%20或+;对空格进行编码;?_Url_Urlencode_Url Encoding - Fatal编程技术网

在URL中,是否应使用%20或+;对空格进行编码;?

在URL中,是否应使用%20或+;对空格进行编码;?,url,urlencode,url-encoding,Url,Urlencode,Url Encoding,在URL中,我应该使用%20或+对空格进行编码吗?例如,在下面的示例中,哪一个是正确的 www.mydomain.com?type=xbox%20360 www.mydomain.com?type=xbox+360 我们公司倾向于前者,但使用Java方法与“Xbox360”(和“UTF-8”) 那么,有什么区别呢?这不重要,就像你把字母A编码为%41一样 但是,如果您处理的系统无法识别一个表单,那么无论“规范”怎么说,您似乎都必须满足它的要求。表单数据(用于GET或POST)通常被编码为应用程

在URL中,我应该使用
%20
+
对空格进行编码吗?例如,在下面的示例中,哪一个是正确的

www.mydomain.com?type=xbox%20360
www.mydomain.com?type=xbox+360
我们公司倾向于前者,但使用Java方法与
“Xbox360”
(和
“UTF-8”

那么,有什么区别呢?

这不重要,就像你把字母A编码为%41一样

但是,如果您处理的系统无法识别一个表单,那么无论“规范”怎么说,您似乎都必须满足它的要求。

表单数据(用于GET或POST)通常被编码为
应用程序/x-www-form-urlencoded
:这为空格指定了
+

URL编码为指定
%20

理论上,我认为在
之前和之后应该有%20:

example.com/foo%20bar?foo+bar
根据(它们是这些内容的官方来源),查询字符串中的空格字符(仅在查询字符串中)可以编码为“
%20
”或“
+
”。从“建议”下的“查询字符串”部分:

在查询字符串中,加号保留为空格的简写符号。因此,必须对实数加号进行编码。此方法用于使查询URI更容易在不允许空格的系统中传递

根据URI的官方规范第3.4节,“查询”组件与URL相关:

3.4。查询组件 查询组件是一个由用户解释的信息字符串 资源

   query         = *uric
在查询组件中,字符“;”、“/”、“?”、“:”、“@”, “&”、“=”、“+”、“、”和“$”是保留的

因此,如果其他软件不接受查询字符串中带有空格的URL(编码为“
+
”字符),则这是一个错误


至于问题的第三部分,修复
URLEncoder.encode()
输出的一种方法(尽管有点难看)是,然后在返回值上
replaceAll(\\+”,“%20”)

您可以使用其中一种-这意味着大多数人选择“+”,因为它更易于阅读。

对查询值进行编码时,任何一种形式,加号或百分之二十有效;然而,由于互联网的带宽不是无限的,所以你应该使用plus,因为它少了两个字节。

这种混乱是因为URL至今仍然是“坏的”

以“”为例。这是一个URL。网址 是一个统一的资源定位器,实际上是指向网页的指针 (在大多数情况下)。URL实际上有一个非常明确的结构 自1994年第一个规范以来

我们可以提取有关“”的详细信息 网址:

如果我们看一个更 复杂的URL,例如 ”“我们可以 提取以下信息:

每个部分的保留字符都不同

对于HTTP URL,必须将路径片段部分中的空格编码为 “%20”(不是,绝对不是“+”),而路径中的“+”字符 片段部分可以不编码

现在在查询部分,空格可以编码为“+”(例如 向后兼容性:不要尝试在URI中搜索它 标准)或“%20”,而“+”字符(因此 歧义)必须转义到“%2B”

这意味着必须对“蓝色+浅蓝色”字符串进行编码 在路径和查询部分中有不同的设置: "". 从那里 可以推断,对完全构造的URL进行编码是不可能的 没有对URL结构的语法意识

这归结起来就是

您应该在
之前有
%20
,在
+
之后有


使用java.net.URI,而不是使用编码到应用程序/x-www-form-urlencoded的URLEncoder,而是使用真正百分比编码的java.net.URI。为了.net开发人员的利益:HttpUtility.UrlPathEncode使用“%20”HttpUtility.UrlEncode使用“+”。来源:@MetaByter我认为将这个问题表述为“在URL中,我是否应该在URL的查询部分使用%20或+对空格进行编码?”因为虽然您显示的示例仅在查询部分包含空格,但并非所有读者都清楚答案取决于此。或者,您也可以使用以下问题:“在下面的特定URL示例中,我是否应该编码…”。。。“除了在电子邮件链接中,因为在?将导致打开的电子邮件中仍有+es。所以:
mailto:support@example.org?主题=I%20需要%20帮助
过早优化。。。。因为它让我发笑,我想说使用plus的一个更好的理由是它比%20更适合人类阅读。对我来说无论如何都是这样。
+---------------+-------------------+   
|      Part     |      Data         |   
+---------------+-------------------+   
|  Scheme       | http              |   
|  Host address | www.google.com    |   
+---------------+-------------------+  
+-------------------+---------------------+
|        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               |
+-------------------+---------------------+