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,但我不确定是要修补代码还是抛出异常(实际应该是这样).
oli*_*bre 16
通常不支持方括号[和]in URL。
%5B和替换它们%5D:使用命令行,以下示例基于bash和sed:
url='http://example.com?day=[0-3][0-9]'
encoded_url="$( sed 's/\[/%5B/g;s/]/%5D/g' <<< "$url")"
Run Code Online (Sandbox Code Playgroud)使用 PHPrawurlencode()或urlencode()
<?php
echo '<a href="http://example.com/day/',
rawurlencode('[0-3][0-9]'), '">';
?>
Run Code Online (Sandbox Code Playgroud)
输出:
<a href="http://example.com/day/%5B0-3%5D%5B0-9%5D">
Run Code Online (Sandbox Code Playgroud)
或者:
<?php
$query_string = 'day=' . urlencode('[0-3][0-9]') .
'&month=' . urlencode('[0-1][0-9]');
echo '<a href="http://example.com?',
htmlentities($query_string), '">';
?>
Run Code Online (Sandbox Code Playgroud)使用您最喜欢的编程语言...请通过发表评论或直接编辑此答案来扩展此答案,以添加您在编程语言中使用的功能;-)
有关更多详细信息,请参阅指定 URL 语法的RFC 3986。的附录A是关于%-encoding在查询字符串(括号为属于“GEN-delims”是%-encoded)。
我知道这个问题有点陈旧,但我只想注意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).
路径名中唯一不允许使用的字符几乎是 # 和 ? 因为它们意味着路径的终点。
uri rfc 将会有最终的答案:
http://www.ietf.org/rfc/rfc1738.txt
不安全:
由于多种原因,角色可能不安全。空格字符是不安全的,因为当 URL 被转录、排版或接受文字处理程序处理时,重要的空格可能会消失,而无关紧要的空格可能会被引入。字符“<”和“">”是不安全的,因为它们在自由文本中用作 URL 周围的分隔符;在某些系统中,引号 (""") 用于分隔 URL。字符“#”是不安全的,应始终进行编码,因为它在万维网和其他系统中用于分隔 URL 与片段/锚点可能跟随它的标识符。字符“%”不安全,因为它用于其他字符的编码。其他字符不安全,因为已知网关和其他传输代理有时会修改此类字符。这些字符是“{”、“} "、"|"、"\"、"^"、"~"、"["、"]" 和 "`"。
所有不安全字符必须始终编码在 URL 中。例如,即使在通常不处理片段或锚标识符的系统中,字符“#”也必须在 URL 中进行编码,因此,如果将 URL 复制到使用它们的另一个系统中,则无需更改网址编码。
答案是它们应该是十六进制编码的,但是知道波斯特尔定律,大多数东西都会逐字接受它们。
小智 5
任何接受URL并且在引入特殊字符时不会引发异常的浏览器或支持Web的软件几乎可以保证在幕后编码特殊字符.卷括号,方括号,空格等都有特殊的编码方式来表示它们,以免产生冲突.根据之前的答案,处理这些问题最安全的方法是对它们进行URL编码,然后再将它们交给试图解析URL的东西.
| 归档时间: |
|
| 查看次数: |
31751 次 |
| 最近记录: |