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