2013-05-22 144 views

回答

7

使用CGI库你已经免费获得:

require 'cgi' 

parsed = CGI.parse("[email protected]&user_id=13&last_seen=January 14, 2013") 

# => {"email"=>["[email protected]"], "user_id"=>["13"], "last_seen"=>["January 14, 2013"]} 

或者,如果你使用rack

require 'rack/utils' 

parsed = Rack::Utils.parse_query("[email protected]&user_id=13&last_seen=January 14, 2013") 

# => {"email"=>"[email protected]", "user_id"=>"13", "last_seen"=>"January 14, 2013"} 
+0

今天我从这里学到了很好的东西,2个新的图书馆。 :) –

2
str = "[email protected]&user_id=13&last_seen=January 14, 2013" 
Hash[*str.split(/=|&/)] 

如果你在Rails的是,你可以象征键与Hash#symbolize_keys,否则你可以自己做。

+0

是否有任何第一个使用第二个的理由是什么?第一个似乎与我的示例字符串正常工作。 – Shpigford

+0

@Shpigford:第一个是真正的答案,你应该实际使用的方法。第二个答案是在这里教你'Hash []'语法和'String#split'方法。但是,请注意,解析,甚至解析单个行,这是一个超出诸如split之类的简单方法的任务。 –

0

如何下面:

require 'uri' 

str = "[email protected]&user_id=13&last_seen=January 14, 2013" 
URI.decode_www_form(str) 
# => [["email", "[email protected]"], 
#  ["user_id", "13"], 
#  ["last_seen", "January 14, 2013"]] 
Hash[URI.decode_www_form(str)] 
# => {"email"=>"[email protected]", 
#  "user_id"=>"13", 
#  "last_seen"=>"January 14, 2013"}