包含非可视字符的网址

时间:2012-09-17 05:03:50

标签: url unicode web special-characters web-crawler

我的抓取工具似乎与特定客户的网站有问题。

在该网站上,有重定向到URL,如下所示:

http://example.com/dir/aaa$0081 aaa.php (将URL显示为非编码,$ 0081为使用HEX表示的两个字节。)

现在,这是在使用WinInet Windows API调用HttpQueryInfo检查返回的缓冲区时,所以这两个字节实际上代表了一个WideChar。

现在,我可以看到,例如$ 0081是一个非视觉控制角色: Latin-1 Supplement (Unicode block)

问题在于,如果我将URL“按原样”(URL编码)用于将来对服务器的请求,它将以400或404响应。(另一方面,它是完全删除,它的工作原理和服务器提供正确的页面和响应......)

我怀疑是FireFox / IE /等。在发出HTTP请求之前剥离URL中的不可见控件字符...(至少IEHTTPHeaders和FF Live HTTP Headers插件不显示任何不可见的字符。)

我想知道是否有人能指出这个标准?对于我所看到的,不应该在URL中找到不可见的chracters,所以我想一个解决方案可能是(在这个和将来的情况下)我删除它们。但这不是一个似乎在网上广泛讨论过的话题。

1 个答案:

答案 0 :(得分:3)

在给出的示例中,$ 0081只是五个Ascii字符。但是,如果你的意思是这就像看起来那样,并且你(以某种方式)推断实际的URL包含U + 0081,那么应该发生什么,并且至少在Firefox上发生的是,它是%-encoded(“URL编码”)为%C2%81(由% - 编码U + 0081的UTF-8编码形式的两个字节组成.Firefox在地址栏中显示为空,因为U + 0081是控制字符,但服务器实际上得到%C2%81并且必须从那里获取它。

我不知道空间来自哪里,但URL不能包含空格,除非是%-encoded(%20)。

相关标准是互联网标准STD 66 URI通用语法。 (目前RFC 3986.注意:在本期中,人们仍经常将较旧的RFC称为“标准”。)