【问题标题】:Evaluate a potential relative URI in the context of another in Ruby在 Ruby 中评估另一个上下文中的潜在相对 URI
【发布时间】:2011-08-08 20:53:15
【问题描述】:

我在一个 Ruby 程序中有两个 URI。一个肯定是绝对 URI,另一个可能是绝对的或相对的。我想在第一个的上下文中将第二个转换为绝对URI,所以如果第一个是http://pupeno.com/blog,第二个是/about,结果应该是http://pupeno.com/about。有什么想法吗?

【问题讨论】:

    标签: ruby url uri


    【解决方案1】:

    这样就可以了:

    require 'uri'
    url=URI.parse('http://pupeno.com/blog')
    => #<URI::HTTP:0x00000100e35368 URL:http://pupeno.com/blog> 
    ruby-1.9.2-p0 > url.path="/about"
    => "/about" 
    ruby-1.9.2-p0 > url
    => #<URI::HTTP:0x00000100e35368 URL:http://pupeno.com/about> 
    

    【讨论】:

    • 这种方法的问题是第二个字符串也可能是一个绝对 URI。
    • 哎呀,从描述中我没看懂
    【解决方案2】:

    Ruby 的内置 URI 和 Addressable gem 都可以轻松解决这个问题。我更喜欢 Addressable,因为它功能更全面,但 URI 是内置的。

    require 'uri'
    
    URI.join('http://pupeno.com/blog', '/about') # => #<URI::HTTP:0x00000101098538 URL:http://pupeno.com/about>
    

    require 'addressable/uri'
    
    uri = Addressable::URI.parse('http://pupeno.com/blog')
    uri.join('/about') # => #<Addressable::URI:0x806704a0 URI:http://pupeno.com/about>
    

    使用提供的join 方法是个好主意,因为它们会进行一些健全性检查以确保返回的地址是健全的。如果您有相对 URL 并简单地替换旧路径,则直接分配给路径可能会破坏事情。 join 将考虑到这一点,并将替换或合并,以适当者为准。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-01-15
      • 1970-01-01
      • 1970-01-01
      • 2010-11-24
      • 2023-03-18
      • 1970-01-01
      • 2019-12-30
      • 1970-01-01
      相关资源
      最近更新 更多