Rails中没有合适的方法实现这个功能
php倒是很简单 parse_string 函数就可以搞定

CGI::parse 的行为又很古怪,基本不可以用

>> CGI.parse({:a=>"b"}.to_param)
=> {"a"=>["b"]}

注意 Hash.to_param 是 ActiveSupport 支持的
{:a=>"b",:c=>"d"}.to_param => "a=b&c=d"

现在如果使用了rack的rails可以使用这个方法来
Rack::Utils.parse_query

>> Rack::Utils.parse_query({:a=>"b"}.to_param)
=> {"a"=>"b"}
>> Rack::Utils.parse_query({:a=>["b","c"]}.to_param)
=> {"a[]"=>["b", "c"]}

escape的话可以用这个
Rack::Utils.unescape
Rack::Utils.escape


如果没有使用 rack 的 rails
比如 rails 1.x

可以使用这个 Addressable
uri = Addressable::URI.parse("http://example.com/?var=value")
uri.query_values # => {"var"=>"value"}
uri.query_values = {"one" => "1", "two" => "2"}
uri.to_s # => "http://example.com/?two=2&one=1"