在Python中,我可以这样做:
>>> import urlparse, urllib
>>> q = urlparse.parse_qsl("a=b&a=c&d=e")
>>> urllib.urlencode(q)
'a=b&a=c&d=e'
在 Ruby[+Rails] 中,我不知道如何在不“自己动手”的情况下做同样的事情,这看起来很奇怪。 Rails 方式对我不起作用——它在查询参数的名称中添加方括号,另一端的服务器可能支持也可能不支持:
>> q = CGI.parse("a=b&a=c&d=e")
=> {"a"=>["b", "c"], "d"=>["e"]}
>> q.to_params
=> "a[]=b&a[]=c&d[]=e"
我的用例很简单,我希望修改某些值的值query-string
URL 的一部分。依赖标准库和/或 Rails 似乎很自然,并编写如下内容:
uri = URI.parse("http://example.com/foo?a=b&a=c&d=e")
q = CGI.parse(uri.query)
q.delete("d")
q["a"] << "d"
uri.query = q.to_params # should be to_param or to_query instead?
puts Net::HTTP.get_response(uri)
但前提是生成的 URI 实际上是http://example.com/foo?a=b&a=c&a=d
, 并不是http://example.com/foo?a[]=b&a[]=c&a[]=d
。有没有正确或更好的方法来做到这一点?
在现代红宝石中,这很简单:
require 'uri'
URI.encode_www_form(hash)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)