Html URL是否允许包含空格?

Html URL是否允许包含空格?,html,http,url,encoding,Html,Http,Url,Encoding,URI(特别是HTTP URL)是否允许包含一个或多个空格字符?如果必须对URL进行编码,+是一种普遍遵循的约定,还是一种合法的替代方案 特别是,是否有人可以指向RFC,该RFC指示必须对带有空格的URL进行编码 提出问题的动机:在测试网站时,我注意到一些URL中包含空格。Firefox似乎做了正确的事情,这让我很惊讶!但我希望能够将开发人员指向RFC,这样他们就有必要修复这些URL。是的,空间通常编码为“%20”。 传递到URL的任何参数都应该进行编码,这仅仅是出于安全原因。URL中不应该有空

URI(特别是HTTP URL)是否允许包含一个或多个空格字符?如果必须对URL进行编码,
+
是一种普遍遵循的约定,还是一种合法的替代方案

特别是,是否有人可以指向RFC,该RFC指示必须对带有空格的URL进行编码


提出问题的动机:在测试网站时,我注意到一些URL中包含空格。Firefox似乎做了正确的事情,这让我很惊讶!但我希望能够将开发人员指向RFC,这样他们就有必要修复这些URL。

是的,空间通常编码为“%20”。
传递到URL的任何参数都应该进行编码,这仅仅是出于安全原因。

URL中不应该有空格。如果您需要地址,请使用其编码值
%20

Firefox 3将URL中的
%20
显示为地址栏中的空格。

回答您的问题。我想说,应用程序替换URL中使用的值中的空格是相当常见的。这样做的原因通常是为了避免出现更难读取的百分比(URI)编码

查看这篇关于的维基百科文章。

URL在中定义,尽管其他RFC也相关,但已过时

它们可能没有空格,还有许多其他字符。由于这些被禁止的字符通常需要以某种方式表示,因此有一种方案可以将它们编码为URL,方法是将它们转换为具有“%”前缀的ASCII十六进制等效字符

大多数编程语言/平台提供编码和解码URL的功能,尽管它们可能不符合RFC标准。例如,我知道PHP没有。

根据:

不安全:

由于多种原因,字符可能不安全空间 字符不安全,因为有效空格可能会消失并 在转录或删除URL时,可能会引入不重要的空格 排版的或经过文字处理程序处理的。 字符
不安全,因为它们被用作 自由文本中URL周围的分隔符;引号(
“”“
)用于 在某些系统中分隔URL。字符
“#”
不安全,应 始终进行编码,因为它在万维网和其他应用程序中使用 系统将URL与可能存在错误的片段/锚点标识符分隔开来 跟随它。字符
“%”
是不安全的,因为它用于 其他字符的编码。其他字符不安全,因为 已知网关和其他传输代理有时会修改 这些字符。这些字符是
“{”
“}”
“|”
“\”
“^”
“~”
“[”
“]”
,和
“`

所有不安全字符必须始终在URL中编码 例如,字符
“#”
必须在URL中编码,即使在 通常不处理碎片或锚的系统 标识符,因此如果URL被复制到另一个系统中 如果不使用它们,则无需更改URL编码


简短回答:不,您必须对空格进行编码;将空格编码为
+
是正确的,但仅在查询字符串中;在路径中,您必须使用
%20
为什么必须对其进行编码?请求如下所示:

GET /url HTTP/1.1
(Ignoring headers)
有3个字段用空格分隔。如果在url中放置空格:

GET /url end_url HTTP/1.1
如果有4个字段,HTTP服务器会告诉您这是一个无效的请求

GET /url%20end_url HTTP/1.1
3个字段=>有效

注意:在查询字符串(后面?)中,空格通常被编码为+

GET /url?var=foo+bar HTTP/1.1 
而不是

GET /url?var=foo%20bar HTTP/1.1 
是否有人可以指向RFC,指示必须对带有空格的URL进行编码

URI和URL在RFC3986中定义


如果你看一下上面定义的语法,你最终会注意到空格字符永远不能成为语法合法的URL的一部分,因此术语“带空格的URL”“本身就是一个矛盾。

URL可以包含空格字符,在大多数浏览器中它们将显示为%20,但浏览器编码规则经常变化,我们无法依赖浏览器如何显示URL

因此,您可以将URL中的空格字符替换为您认为可以使URL更可读和“漂亮”的任何字符;)。。。。。O因此,首选的通用字符是“-”、“_”、“+”。。。。但是这些都不是强制的,所以你可以使用URL中不应该出现的任何字符

请避免使用%、&、}、{、]、[、/、>,<作为URL空间字符替换,因为它们可能在某些浏览器和平台上引发错误

如您所见,Stak溢出本身使用“-”字符作为空格(%20)替换


有一个愉快的问题。

1738已被2396取代。这是当前的Uri规范。但在本例中,这并不重要。2396已被3986取代。许多人会弄错这一点,因为RFC是不可变的,因此不会告诉读者它们已被淘汰。提示:使用,例如,它会显示mi在顶部使用元数据。嗨,我也很困惑,有时我看到这本书使用“+”但有时使用“%20”,你能给出一些例子吗?当用户提交表单时,表单如何对空格进行编码?使用哪个字符?请参阅以获取更多详细信息。碎片/散列部分如何?空格应该如何编码?@gumkins:the fragment(#and after)未发送到服务器。实际上,您可以使用%20或+anywhere对一个空格进行编码。后来出现的超集:所有无效字符是什么:相关:如果var真的是“foo+bar”而不是“foo-bar”?我认为这是一个要求