Как добавить закодированные значения запроса в URL? - PullRequest
5 голосов
/ 09 февраля 2012

Я ищу удобный и функциональный способ добавления закодированных значений в строку запроса URL в Ruby. В настоящее время у меня есть:

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"

Это не то, что я ищу, потому что мне нужно получить "http://mydomain.example/tv?show=Rosie%20%26%20Jim", чтобы значение show= не было усечено.

Есть ли в Open :: URI другой метод, который бы это делал? Если нет, то можно ли это сделать с помощью любого другого стандартного Ruby или gem?

Ответы [ 2 ]

10 голосов
/ 09 февраля 2012

Попробуйте с CGI::escape вместо URI::encode. Документ здесь

8 голосов
/ 09 февраля 2012

URI.encode_www_form работает хорошо и удобнее для добавления нескольких аргументов

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)
...