2012-02-09 12 views
4

RubyのURLクエリ文字列にエンコードされた値を追加する便利で機能的な方法を探しています。 現在、私が持っている:show=値が切り捨てられないように、私は、 "http://mydomain.example/tv?show=Rosie%20%26%20Jim"を取得する必要があるためエンコードされたクエリ値をURLに追加するにはどうすればよいですか?

require 'open-uri' 

u = URI::HTTP.new("http", nil, "mydomain.example", nil, nil, "/tv", nil, "show=" + URI::encode("Rosie & Jim"), nil) 

p u.to_s # => "http://mydomain.example/tv?show=Rosie%20&%20Jim" 

これは、私が探しているものではありません。

Open :: URIにはこれを行う別の方法がありますか?もしそうでなければ、それは他の標準のRubyやgemで行うことができますか?

+0

を追加するためのより便利です。それはRubyのURIのすべてであり、さらに多くです。単純なURL操作以上のものに強くお勧めします。 –

答えて

9

URI::encodeの代わりにCGI::escapeを試してください。 doc here

+0

ありがとうございます。それは仕事です。私はスペースがプラスとして見えることに気づいた。だから私はそれを見て、私はURLのクエリでは、 "www_form"と呼ばれるエンコーディングが見つかりました。これはopen-uriでもっと便利な方法を見つけることにつながりましたが、私が求めていたことを正確に行うので、私はあなたの答えを受け入れます。 – SimonMayer

7

URI.encode_www_formはうまく機能し、あなたは、[アドレス指定](http://addressable.rubyforge.org/api/)宝石で見たいと思うかもしれません複数の引数

q = URI.encode_www_form("show" => "Rosie & Jim", "series" => "3", "episode" => "4") 
u = URI::HTTP.new("http", nil, "mydomain.example", nil, nil, "/tv/ragdoll", nil, q, nil) 
関連する問題