2017-01-06 59 views
0

例如:我怎样才能得到一个NSURL的顶级域名?

http://www.youtube.com” - > “.COM”

http://www.google.com.gr” - > “.com.gr”

https://made.in.china.chinesewebsite.닷컴” - >

“닷컴”。

URL的主机是死胡同。

NSURL *URL; 

[URL host]; 
+0

http://stackoverflow.com/questions/20430620/is-it-possible-to-just-get-the-domain-and-tld-from-an-nsurl-no-www-or-anything –

+0

The回答理所当然地认为你知道你在找什么,并且它实现了一个比较。它适用于[URL isFromWebsite:“youtube.com”]以及[URL isFromWebsite:“。com”]; – Vulkan

+0

但'.com.gr'不是TLD--'.gr'。 –

回答

1

获取URL的主机,在.分隔符打破它,并采取最后一个组件。

- (NSString *) tldOfURL: NSURL *theURL; { 
    NSString *host = theURL.host; 
    NSArray *parts = [host componentsSeparatedByString: @"."]; 
    if parts.count < 2 { 
    return nil; 
    } 
    return parts.lastObject; 
} 

起初,我的回答是使用NSURLComponents,因为在大多数情况下,这个类为您完成所有繁重的工作,但它看起来像它没有用于提取TLD的机制。

请注意,如果主机名不包含至少一个句点(.),则上述内容将返回nil,并且如果主机以句点结尾,则返回空字符串。这两种情况都应该视为错误。

P.S.我开始在Objective-C语法中生锈。很难相信,考虑到我花了多少年编写Objective-C!

+0

这不适用于“.com.gr”或由多个由点分隔的组件组成的任何其他TLD。附:你的名字听起来很熟。 :) – Vulkan