我希望能够用Ruby解析任何网址,以获得域名的主要部分,而不需要www (只有example.com)
发布于 2011-07-13 13:12:03
这应该适用于几乎所有的URL:
# 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或者:
# 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'。
发布于 2011-11-30 17:41:50
请注意,对于特定的顶级域名,没有算法方法可以找到域名可以注册的最高级别(每个注册表的策略都不同),唯一的方法是创建所有顶级域名的列表和可以注册的域名级别。
这就是Public Suffix List存在的原因。
我是PublicSuffix的作者,这是一个将域分解成不同部分的Ruby库。
下面是一个例子
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"发布于 2011-11-30 17:21:19
简单地说:为了克服Mischas第二个示例中的url的第二次解析,您可以进行字符串比较,而不是URI.parse。
# 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链接),您必须相应地进行调整。
https://stackoverflow.com/questions/6674230
复制相似问题