如何在没有子域的情况下获得 NSURL 的主机?
这里有一些输入。
应该保留的部分是粗体,应该被剥离的部分是斜体:
server.com
www. server.com
媒体。server.com
主机 1.media。服务器.com
到目前为止,听起来很容易实现。
但它也应该正确处理以下输入,以及任何我没有想到的奇怪情况,这些情况在任何相关 RFC 中被普遍接受或指定。
server.co.uk
媒体。server.co.uk
127.0.0.1
...
请参阅从主机名中提取域名这个问题似乎没有简单的解决方案。
这并不能回答这个难题,但是如果您将 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
}