首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何解析Ruby中的url来获得主域?

如何解析Ruby中的url来获得主域?
EN

Stack Overflow用户
提问于 2011-07-13 12:48:33
回答 7查看 44.9K关注 0票数 43

我希望能够用Ruby解析任何网址,以获得域名的主要部分,而不需要www (只有example.com)

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2011-07-13 13:12:03

这应该适用于几乎所有的URL:

代码语言:javascript
运行
复制
# URL always gets parsed twice
def get_host_without_www(url)
  url = "http://#{url}" if URI.parse(url).scheme.nil?
  host = URI.parse(url).host.downcase
  host.start_with?('www.') ? host[4..-1] : host
end

或者:

代码语言:javascript
运行
复制
# Only parses twice if url doesn't start with a scheme
def get_host_without_www(url)
  uri = URI.parse(url)
  uri = URI.parse("http://#{url}") if uri.scheme.nil?
  host = uri.host.downcase
  host.start_with?('www.') ? host[4..-1] : host
end

您可能必须使用require 'uri'

票数 68
EN

Stack Overflow用户

发布于 2011-11-30 17:41:50

请注意,对于特定的顶级域名,没有算法方法可以找到域名可以注册的最高级别(每个注册表的策略都不同),唯一的方法是创建所有顶级域名的列表和可以注册的域名级别。

这就是Public Suffix List存在的原因。

我是PublicSuffix的作者,这是一个将域分解成不同部分的Ruby库。

下面是一个例子

代码语言:javascript
运行
复制
require 'uri/http'

uri = URI.parse("http://toolbar.google.com")
domain = PublicSuffix.parse(uri.host)
# => "toolbar.google.com"
domain.domain
# => "google.com"

uri = URI.parse("http://www.google.co.uk")
domain = PublicSuffix.parse(uri.host)
# => "www.google.co.uk"
domain.domain
# => "google.co.uk"
票数 83
EN

Stack Overflow用户

发布于 2011-11-30 17:21:19

简单地说:为了克服Mischas第二个示例中的url的第二次解析,您可以进行字符串比较,而不是URI.parse。

代码语言:javascript
运行
复制
# Only parses once
def get_host_without_www(url)
  url = "http://#{url}" unless url.start_with?('http')
  uri = URI.parse(url)
  host = uri.host.downcase
  host.start_with?('www.') ? host[4..-1] : host
end

这种方法的缺点是,它将url限制为基于http(s)的url,这是广泛的标准。但是,如果您将使用它更一般(f.e.对于ftp链接),您必须相应地进行调整。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6674230

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档