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 に答える