0

我正在尝试通过循环更改此http://www.exampleofurl.com/search?q=4&e=25;i=8&b=2的每个参数,但我得到了这个输出。

http://www.exampleofurl.com/search?q=changed&e=25;i=8&b=2
http://www.exampleofurl.com/search?q=4&e=changed;i=8&b=2
http://www.exampleofurl.com/search?q=4&e=25;i=changed&b=2
http://www.exampleofurl.com/search?q=4&e=changed5;i=8&b=changed

当我的参数为空时,我得到这个奇怪的输出。

search?changedqchanged=changed4changed&changedechanged=changed2changed5changed;changedichanged=changed8changed&changedbchangedochangedochanged=changed

这是我的代码。

require 'uri'
url = "http://www.exampleofurl.com/search?q=4&e=25;i=8&b=2"
uri = URI.parse(url)

params = {}
t = "changed"

q = uri.query
p = q.split(/[&;]/) if q != nil

p.each do |part|
   k,v = part.split('=', 2)
   params[k] = v

   t.each do |tr|
       uri.query = q.gsub(params[k], tr)
   end
end

有人可以告诉我哪里出了问题,最有效的方法是什么?

我想要这样的输出。

q=changed&e=25;i=8&b=2
q=4&e=changed;i=8&b=2
q=4&e=25;i=changed&b=2
q=4&e=25;i=8&b=changed

提前致谢。

马可

4

1 回答 1

0

对于查询部分的工作,我认为您可以执行以下操作:

CGI::parse(uri.query).inject({}) { |hash, (key, value)| hash[key] = "changed"; hash}

这应该导致像这样的哈希

{"q"=>"changed", "e"=>"changed", "i"=>"changed", "b"=>"changed"}

如果你把它加入到你解析的 URI 中,你应该完成。

于 2012-06-28T01:30:41.513 回答