用Ruby中的空格替换%20

时间:2012-07-24 00:38:15

标签: ruby arrays string

我目前有一个类似["green%20books"]的字符串,我希望它能阅读["green books"]

我认为谷歌搜索会很快产生结果,但每个人都想把空格变成%20s。不是相反。

非常感谢任何帮助!

编辑:

这是我正在使用的功能,我很困惑在这里解码URL。我尝试删除URI.encode文本,但这破坏了功能。

def self.get_search_terms(search_url)
    hash = CGI.parse(URI.parse(URI.encode(search_url)).query) #returns a hash
    keywords = []
    hash.each do |key, value|
      if key == "q" || key == "p"
        keywords << value
      end
    end
    keywords
  end

3 个答案:

答案 0 :(得分:20)

你可以使用URI的'unencode'方法。 (别名为解码)

require 'uri'
URI.decode("green%20books")
# => "green books"

这不仅会用空格替换“%20”,而且每个uri编码的字符都是我想要的。

documentation

答案 1 :(得分:5)

CGI::unescape会做你想做的事:

1.9.2-p320 :001 > require 'cgi'
=> true 
1.9.2-p320 :002 > s = "green%20books"
=> "green%20books" 
1.9.2-p320 :003 > CGI.unescape(s)
=> "green books"

另一种选择(如YenTheFirst所述)可能是URI.decode。但是,I read a discussion that it would be deprecated - 尽管那是在2010年。

无论如何,既然你在询问数组,你可能会map使用该方法:

ary.map { |s| CGI.unescape(s) }

答案 2 :(得分:3)

您可以使用正则表达式:

string = "green%20books"
string.gsub!('%20', ' ')

puts string