根据维基百科,URI被定义为
<scheme name> : <hierarchical part> [ ? <query> ] [ # <fragment> ]
我尝试将“http:// some site / page”传递给Uri.IsWellFormedUriString
,然后返回false。然后我尝试了“http:// some%20site / page”,其中编码了空格。而且仍然是假的。
然而,“http:// somesite / page%20Zero”会给我真实的。
我可以在URI的“根级别”中得出结论。不允许空间?或者还有一些我错过的东西。
答案 0 :(得分:2)
您的URI细分过于简单。 “分层部分”包含authority
和path
。 authority
进一步细分为可选的用户名/密码,主机名和端口详细信息。
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
答案 2 :(得分:1)
URI的hierarchical
部分实际上包含authority
和path
组件;有关详细信息,请参阅RFC 3986。
特别是,您会看到path
组件基本上是由pchars
构建的,%20
可以是(除其他外)“{pct-encoded”字符,在this section中定义,其中{{1}}就是一个例子。
我已经在这里发布了一个关于URI验证问题的PHP解决方案,这可能是有意义的:
How to make this PHP URL parsing function nearly perfect?
代码粗略验证RFC 3986,但有一些例外。