网址中是否允许使用方括号?

Ben*_*gel 36 apache url syntax http square-bracket

是否允许使用URL中的方括号?

我注意到Apache commons HttpClient(3.0.1)抛出IOException,wget和Firefox接受方括号.

网址示例:

http://example.com/path/to/file[3].html
Run Code Online (Sandbox Code Playgroud)

我的HTTP客户端遇到这样的URL,但我不确定是要修补代码还是抛出异常(实际应该是这样).

Jus*_*ack 39

RFC 3986声明

由Internet协议文字地址版本6 [RFC3513]或更高版本标识的主机通过将IP文本括在方括号("["和"]")中来区分.这是URI语法中唯一允许使用方括号字符的位置.

所以你不应该在理论上看到这样的URI,因为它们应该到达编码.


oli*_*bre 16

通常不支持方括号[]in URL。

%5B和替换它们%5D

有关更多详细信息,请参阅指定 URL 语法的RFC 3986。的附录A是关于%-encoding在查询字符串(括号为属于“GEN-delims”%-encoded)。

  • 请支持“通常不支持”的说法,经过相当广泛的测试,这似乎是非常错误的 (3认同)

MM.*_*MM. 8

我知道这个问题有点陈旧,但我只想注意PHP使用括号来传递URL中的数组.

http://www.example.com/foo.php?bar[]=1&bar[]=2&bar[]=3
Run Code Online (Sandbox Code Playgroud)

在这种情况下$_GET['bar']将包含array(1, 2, 3).

  • 正确,但是当浏览器没有自动编码时,它们仍然应该被编码.PHP仍将正确解释括号,它自己的http_build_query()函数也会对它们进行编码. (13认同)

172*_*729 5

路径名中唯一不允许使用的字符几乎是 # 和 ? 因为它们意味着路径的终点。

uri rfc 将会有最终的答案:

http://www.ietf.org/rfc/rfc1738.txt

不安全:

由于多种原因,角色可能不安全。空格字符是不安全的,因为当 URL 被转录、排版或接受文字处理程序处理时,重要的空格可能会消失,而无关紧要的空格可能会被引入。字符“<”和“">”是不安全的,因为它们在自由文本中用作 URL 周围的分隔符;在某些系统中,引号 (""") 用于分隔 URL。字符“#”是不安全的,应始终进行编码,因为它在万维网和其他系统中用于分隔 URL 与片段/锚点可能跟随它的标识符。字符“%”不安全,因为它用于其他字符的编码。其他字符不安全,因为已知网关和其他传输代理有时会修改此类字符。这些字符是“{”、“} "、"|"、"\"、"^"、"~"、"["、"]" 和 "`"。

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

答案是它们应该是十六进制编码的,但是知道波斯特尔定律,大多数东西都会逐字接受它们。

  • 所有不安全字符必须始终编码在 URL 中。必须,而不是应该。 (7认同)

小智 5

任何接受URL并且在引入特殊字符时不会引发异常的浏览器或支持Web的软件几乎可以保证在幕后编码特殊字符.卷括号,方括号,空格等都有特殊的编码方式来表示它们,以免产生冲突.根据之前的答案,处理这些问题最安全的方法是对它们进行URL编码,然后再将它们交给试图解析URL的东西.