4

我目前有一个字符串,其内容类似于["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
4

3 回答 3

20

您可以使用 URI 的“unencode”方法。(别名为解码)

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

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

文件

于 2012-07-24T00:49:11.663 回答
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. 然而,我读到一个讨论它会被弃用——尽管那是在 2010 年。

无论如何,由于您要询问数组,因此您可能会map使用该方法:

ary.map { |s| CGI.unescape(s) }
于 2012-07-24T00:50:03.060 回答
4

您可以使用正则表达式:

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

puts string
于 2012-07-24T00:52:34.763 回答