在URL中,是否应使用%20或+;对空格进行编码;?
在URL中,我应该使用在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)通常被编码为应用程
%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 |
+-------------------+---------------------+