2

如何在没有子域的情况下获得 NSURL 的主机

这里有一些输入。
应该保留的部分是粗体,应该被剥离的部分是斜体:

server.com
www. server.com
媒体。server.com
主机 1.media。服务器.com

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

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

4

2 回答 2

3

请参阅从主机名中提取域名这个问题似乎没有简单的解决方案。

于 2011-02-10T13:55:50.083 回答
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
}
于 2013-01-09T21:32:40.600 回答