【问题标题】:Parse domain name from URL string从 URL 字符串解析域名
【发布时间】:2010-02-25 12:39:03
【问题描述】:

如何在 Objective-C 中解析域名?

例如,如果我的字符串值为“http://www.google.com”,我想解析出字符串“google”

【问题讨论】:

  • 澄清需求——你想从 meta.stackoverflow.com 得到什么?
  • 它将是“stackoverflow”。我刚刚发现用“。”将一个字符串分成一个数组。分隔符,然后选择数组 [1]。我不认为这是可扩展的吗?
  • @pierre 我只关注“gov”

标签: objective-c nsurl


【解决方案1】:

我认为这个问题有点无效。主机由其 FQDN(完全限定域名)确定,在您的示例中为 www.google.com。它与 mail.google.comwww.google.infogoogle.com 不同。挑出“google”并非易事,从 URL 的角度来看也没有多大意义。

如果您只想或多或少智能地解析 URL,我认为您可以执行以下操作:

  1. 使用 NSURL 的 -host 方法来正确剥离方案和路径/查询。
  2. 使用 NSString 的 -componentsSeparatedByString: 方法获取域名的“组件”数组。
  3. 忽略最后一个组件。
  4. 如果只剩下一个组件(或者可能足以获取倒数第二个组件),那么您就完成了。
  5. 如果第一个组件包含“www”,如 www3、“ftp”、“mail”或类似的内容,您也可以忽略它。根据您的需要,其余部分可能会感兴趣。
  6. 针对一万个 URL 测试您的算法,以了解这项任务的徒劳性;)

【讨论】:

  • :) 谢谢。我想知道如何做到这一点的原因是因为我得到了来自服务器的几个 url。这些 URL 将 99.9% 的时间采用“thesite.com”格式,所以就我的目的而言,这可能暂时可以作为快捷方式。我只想显示站点名称。单独返回 URL 和命名站点会很好,但我目前无法控制
【解决方案2】:

在 iOS 7 中你可以使用 NSURLComponents 类:

NSURLComponents *components = [[NSURLComponents alloc] initWithString:@"http://stackoverflow.com/questions/2333972/objective-c-parse-domain-name-from-url-string"];
NSAssert([components.host isEqualToString:@"stackoverflow.com"], nil);

【讨论】:

  • 仅供参考,host 包括给定 URL 的子域。所以如果 URL 是www.stackoverflow.com/...,你的断言就会失败。
猜你喜欢
  • 2012-08-30
  • 1970-01-01
  • 1970-01-01
  • 2012-03-20
  • 2021-05-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多