2012-02-09 4 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) 
관련 문제