【问题标题】:How can I get just the TLD of an NSURL?我怎样才能得到一个 NSURL 的 TLD?
【发布时间】:2017-01-06 14:31:57
【问题描述】:

例如:

"http://www.youtube.com" --> ".com"

"http://www.google.com.gr" --> ".com.gr"

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

URL 的宿主是死路。

NSURL *URL;

[URL host];

【问题讨论】:

  • 答案理所当然地认为您知道自己在寻找什么并且它实现了比较。它适用于这个 [URL isFromWebsite:"youtube.com"] 以及这个 [URL isFromWebsite:".com"];
  • 但是.com.gr 不是顶级域名——.gr 是。
  • 是的,从技术上讲,您和 Duncan C 一样正确,但 SLD “youtube.co.uk”和“youtube.com”在您试图找出“youtube”网站的根目录。事情搞砸了。
  • 这就是问题所在 - TLD 之后的所有内容都受本地变化的影响。有.com.gr,但有.co.uk。每个 TLD 都可以自行决定 TLD 之后发生的事情的规则。每个都是特殊情况。

标签: ios nsurl


【解决方案1】:

获取url的host,在.分隔符处拆分,取最后一个组件。

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

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

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

附:我开始对 Objective-C 语法生疏了。难以置信,考虑到我花了多少年时间编写 Objective-C!

【讨论】:

  • 这不适用于“.com.gr”或由多个以点分隔的组件组成的任何其他 TLD。附言你的名字听起来很熟悉。 :)
猜你喜欢
  • 2015-12-15
  • 2015-06-08
  • 1970-01-01
  • 1970-01-01
  • 2018-05-27
  • 2014-02-12
  • 1970-01-01
  • 1970-01-01
  • 2022-01-06
相关资源
最近更新 更多