【问题标题】:How to parse url to get base url? -- Rails 3.1如何解析 url 以获取基本 url? -- 导轨 3.1
【发布时间】:2011-11-27 18:56:19
【问题描述】:

我怎样才能解析像这样的网址

http://www.1800contacts.com/productlist.aspx?dl=P&source=cj&ac=8.2.0007

只有得到

http://www.1800contacts.com

?

PS。有些网址有子域等,所以我不能在这里使用正则表达式。

【问题讨论】:

    标签: ruby-on-rails ruby ruby-on-rails-3.1


    【解决方案1】:

    尝试使用“uri”库:

    require 'uri'
    address = 'http://www.1800contacts.com/productlist.aspx?dl=P&source=cj&ac=8.2.0007'
    uri = URI.parse(address)
    puts "#{uri.scheme}://#{uri.host}"  # => http://www.1800contacts.com
    

    【讨论】:

    • 有没有办法包含非标准端口,比如example.com:8080/you-found-me.php
    • 当然。将地址更改为address = 'http://example.com:8080/you-found-me.php',它会为您提供以下信息:uri.port # => 8080
    【解决方案2】:

    2 种替代方式

    uri = URI.parse(url); uri.path = ''; uri.query = nil; uri.to_s
    url.split('/')[0,3].join('/')
    

    【讨论】:

      【解决方案3】:

      我喜欢@skojin 的第 1 个答案(对不起,我打开了另一个答案,这只是一个很长的评论),因为它为这两种情况提供了更通用的代码:

      require 'uri'
      
      uri = URI "http://www.1800contacts.com/productlist.aspx?dl=P&source=cj&ac=8.2.0007"
      uri.query = uri.fragment = nil
      uri.path = ""
      uri.to_s
      # => "http://www.1800contacts.com"
      
      uri = URI "http://example.com:8080/you-found-me.php"
      uri.query = uri.fragment = nil
      uri.path = ""
      uri.to_s
      # => "http://example.com:8080"
      

      【讨论】:

        猜你喜欢
        • 2019-05-07
        • 1970-01-01
        • 1970-01-01
        • 2021-12-28
        • 1970-01-01
        • 1970-01-01
        • 2014-05-28
        • 1970-01-01
        • 2011-02-18
        相关资源
        最近更新 更多