1

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

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

我试图将“http://some site/page”传递给Uri.IsWellFormedUriString它,它返回false。然后我尝试了 "http://some%20site/page" ,对空格进行了编码。而且还是假的。

但是,“http://somesite/page%20Zero”会给我 True。

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

4

3 回答 3

2

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

URI将http://some site/page“某个站点”作为主机名组件,这是无效的。

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

于 2012-11-13T23:49:35.433 回答
1

不可以,URL 的域名部分不允许有空格。在此处查看详细信息

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

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

于 2012-11-13T23:50:25.297 回答
1

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

特别是,您将看到path组件本质上是由pchars(除其他外)“pct 编码”字符构成的,在本节中定义,这%20是一个示例。


我在这里发布了一个解决 URI 验证问题的 PHP 解决方案,这可能很有趣:

如何让这个 PHP URL 解析功能近乎完美?

该代码粗略地根据 RFC 3986 进行验证,但有一些例外。

于 2012-11-13T23:59:15.100 回答