没有子域的NSURL的主机

时间:2011-02-10 13:22:35

标签: cocoa subdomain nsurl

如何获取没有子域名的NSURL主机

以下是一些输入 应保留的部分以粗体显示,应删除的部分以斜体显示:

  

server.com
  万维网。的的 server.com
  媒体。的的 server.com
   host1.media。 server.com

到目前为止,听起来很容易实现 但它也应该正确处理以下输入,以及任何我认为没有在任何相关RFC中普遍接受或指定的奇怪情况。

  

server.co.uk
  媒体。的的 server.co.uk
  的 127.0.0.1
  ...

2 个答案:

答案 0 :(得分:3)

请参阅Extract domain name from a host name此问题似乎没有一个简单的解决方案。

答案 1 :(得分:0)

这不能解答难题,但是如果您将URL与特定域的白名单匹配(就像我在发现此问题时那样),您可以使用这样的代码来检查:

NSArray *domainsForVideo = @[@"youtube.com",
                             @"youtu.be",
                             @"videoschool.pvt.k12.md.us",
                             @"vimeo.com"];

NSString *host = [url host]; //where URL is some NSURL object

BOOL hostMatches = NO;

for (NSString *testHost in domainsForVideo) {
    if ([[host lowercaseString] isEqualToString:testHost]) hostMatches = YES;  // matches youtube.com exectly

    NSString *testSubdomain = [NSString stringWithFormat:@".%@",testHost];  // matches www.youtube.com but not fakeyoutube.com
    if ([[host lowercaseString] rangeOfString:testSubdomain].location != NSNotFound) hostMatches = YES;
}

if (hostMatches) {
    // this is a Video URL
}