网址中的空格?

时间:2011-03-26 13:39:06

标签: http url standards

w3fools声称网址可以包含空格:http://w3fools.com/#html_urlencode

这是真的吗? URL如何包含未编码的空格?

我认为request line of an HTTP Request使用空格作为分隔符,格式为{the method}{space}{the path}{space}{the protocol}

GET /index.html http/1.1

因此URL如何包含空格?如果可以的话,用+替换空格的做法来自哪里?

4 个答案:

答案 0 :(得分:86)

网址不得包含文字空间。它必须使用percent-encoding或使用URL-safe characters的其他编码进行编码(例如application/x-www-form-urlencoded使用+代替%20代码。

但是语句是对还是错取决于解释:从语法上讲,URI不能包含文字空间,必须对其进行编码;在语义上,%20不是空格(显然),但表示空格。

答案 1 :(得分:16)

他们确实是个傻子。如果你看一下RFC 3986附录A,你会发现在定义URL的语法中没有任何地方提到“空格”。由于语法中没有提到任何地方,因此编码空格的唯一方法是使用百分比编码(%20)。

事实上,RFC甚至声明空格是分隔符,应该被忽略:

  

在某些情况下,额外的空格(空格,换行符,制表符等)可能会      必须添加以跨行打破长URI。空白      提取URI时应该忽略。

  

为了稳健,接受用户类型URI的软件应该尝试      识别并删除分隔符和嵌入的空格。

奇怪的是,RFC中没有提到使用+作为空间编码,尽管它被保留为子分隔符。我怀疑它的使用是公约还是由不同的RFC(可能是HTTP)覆盖。

答案 2 :(得分:3)

空格简单地被“%20”替换为:

http://www.example.com/my%20beautiful%20page

答案 3 :(得分:1)

我认为这些信息部分正确:

  

那不是真的。 URL可以使用空格。没有定义空格被+号替换。

如您所述,网址不能使用空格。 HTTP请求会被搞砸。虽然+是标准的,但我不确定%20的定义位置。