规范化URI以仅提取域名的最佳方法是什么?
例如:
http://www.google.co.uk www.google.co.uk google.co.uk
将全部转换为:
google.co.uk
我本来希望使用System.Uri类,但这似乎只接受带有方案的URL。
尝试使用此代码
var url = ""; if (! url.Contains("://")) { Url = "http://" + url; } var result = new Uri(url).Host;
提取域名很容易
UriBuilder
类对 URL进行UriBuilder
处理,并处理许多边缘情况,例如缺少方案。 这样可以轻松提取域名。 例如,这些都给你www.google.co.uk
:
new UriBuilder("www.google.co.uk").Host new UriBuilder("http://www.google.co.uk").Host new UriBuilder("ftp://www.google.co.uk:21/some/path").Host
…但删除www.
很难
问题似乎很容易,但事实并非如此。 您无法可靠地删除像www
这样的子域名,因为没有真正的区别。 该域名是 www.google.co.uk
,包括www
。 co.uk
没有什么特别的东西使google
成为域名的一部分而www
不属于它 – 只是co.uk
由注册商管理,而google.co.uk
由Google管理。
为了让您了解问题,这里是一个不完整的域名后缀列表,其中包括迄今为止近7100个条目。 值得注意的是,哪个部分甚至不一致:
URL您想要的域 --------------------- ------------------- http://www.crews.aero crews.aero http://www.crew.aero www.crew.aero
最好的方法是Google本身为Chrome的omnibar做的事情 :获取(不完整的)域后缀列表,暂时缓存它,并将域名与域后缀列表进行比较。 您可以自己查看结果:在Chrome omnibar中键入“crews.aero”,它将被视为URL,或键入“crew.aero”,它将被视为搜索。