【问题标题】:How to remove random excess of slashes from url?如何从网址中删除随机多余的斜杠?
【发布时间】:2013-04-20 15:59:06
【问题描述】:

如何从 url 中删除随机多余的斜杠或仅对其进行验证?

例如,

有效陈述

http://domain.com/url/url2

https://domain.com/url/url2

www.domain.com/url/url2

无效陈述:

http://domain.com//url/url2

https://domain.com/////url/url2

www.domain.com/url////////url2

感谢您的帮助!

【问题讨论】:

    标签: ruby-on-rails ruby regex gsub slash


    【解决方案1】:

    其他答案不会从 URL 中删除 尾部斜杠 - 这对于 SEO 目的可能很重要。有很多方法可以做到这一点,例如:

    require 'uri'
    url = URI.parse('https://example.com/////url/url2/')
    url.path.gsub! %r{/+}, '/'
    url.path.sub! %r{/$}, ''
    

    或者:

    require 'uri'
    url = URI.parse('https://example.com/////url/url2/')
    url.path.squeeze!('/')
    url.path.chomp!('/')
    

    请参阅:String#squeeze!String#chomp!

    【讨论】:

      【解决方案2】:

      这种模式可以完成工作(无论是否使用 http(s)):

      "https://domain.com/////url/url2".gsub! %r{(?<!:)/+(?=/)}, ''
      

      【讨论】:

        【解决方案3】:

        使用正则表达式:

        require 'uri'
        url = URI.parse('https://domain.com/////url/url2')
        url.path.gsub! %r{/+}, '/'
        p url.to_s
        

        【讨论】:

        • 好的,谢谢。但这对于“http://”将无法正常工作,因为它有 2 个斜杠
        • 这也会在架构部分(例如https://)之后折叠基本的双斜杠,不是吗?更好地使用%r{([^:/])/+}, '$1/'
        • 啊,是的。固定只做路径。
        • 不错的方法!谢谢,山姆!
        • 工作正常,我更喜欢使用squeeze而不是gsub(ruby-doc.org/core-2.0.0/String.html#method-i-squeeze),url.path.squeeze!("/")
        猜你喜欢
        • 2013-06-14
        • 2013-01-18
        • 1970-01-01
        • 1970-01-01
        • 2012-01-17
        • 1970-01-01
        • 2016-12-22
        • 2011-02-20
        • 1970-01-01
        相关资源
        最近更新 更多