URI的<hierarchical part =“”>中是否允许空格?</hierarchical>

时间:2012-11-13 23:41:50

标签: c#

根据维基百科,URI被定义为

<scheme name> : <hierarchical part> [ ? <query> ] [ # <fragment> ]

我尝试将“http:// some site / page”传递给Uri.IsWellFormedUriString,然后返回false。然后我尝试了“http:// some%20site / page”,其中编码了空格。而且仍然是假的。

然而,“http:// somesite / page%20Zero”会给我真实的。

我可以在URI的“根级别”中得出结论。不允许空间?或者还有一些我错过的东西。

3 个答案:

答案 0 :(得分:2)

您的URI细分过于简单。 “分层部分”包含authoritypathauthority进一步细分为可选的用户名/密码,主机名和端口详细信息。

http://some site/page URI将“some site”作为主机名组件,无效。

http://somesite/page zero URI有“somesite”作为主机名,有效,“page zero”作为路径组件,也是有效的。

答案 1 :(得分:1)

不,URL的域名部分不允许使用空格。请参阅此处的详细信息

http://www.thesitewizard.com/domain/domain-name-with-spaces-or-dots.shtml

http://www.netregister.biz/faqit.htm#1

答案 2 :(得分:1)

URI的hierarchical部分实际上包含authoritypath组件;有关详细信息,请参阅RFC 3986

特别是,您会看到path组件基本上是由pchars构建的,%20可以是(除其他外)“{pct-encoded”字符,在this section中定义,其中{{1}}就是一个例子。


我已经在这里发布了一个关于URI验证问题的PHP解决方案,这可能是有意义的:

How to make this PHP URL parsing function nearly perfect?

代码粗略验证RFC 3986,但有一些例外。