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