2010-10-13 2 views
1

Я хотел бы получить значение 'Q' в этом URL:Синтаксический сложный URL в Рубине

http://www.google.com/url?sa=X&q=http://nashville.broadwayworld.com/article/Just_in_time_for_Halloween_Circle_Players_does_JEKYLL_HYDE_20101013&ct=ga&cad=:s7:f1:v1:d2:i0:lt:e0:p0:t1286988171:&cd=yQoOdKUFTLo&usg=AFQjCNEg2inHF8hXGEvG-TxMQyMx7YGHkA

, если я использую это:

uri = URI.parse("http://www.google.com/url?sa=X&q=http://nashville.broadwayworld.com/article/Just_in_time_for_Halloween_Circle_Players_does_JEKYLL_HYDE_20101013&ct=ga&cad=:s7:f1:v1:d2:i0:lt:e0:p0:t1286988171:&cd=yQoOdKUFTLo&usg=AFQjCNEg2inHF8hXGEvG-TxMQyMx7YGHkA") 

uri_params = CGI.parse(uri.query) 

uri_params['q'] 

Я получаю эту ошибку :

URI::InvalidURIError: bad URI(is not URI?) 

Спасибо!

+1

Так же, как Джед Шнайдер указывает. Точный пример, который вы опубликовали, работает в irb. Я подозреваю, что вы, возможно, так или иначе принимаете входные данные в URI.parse как параметр от пользователя. У меня была аналогичная проблема с использованием Sinatra, и мне пришлось передать строку url через CGI :: unescape перед использованием URL.parse. – maz

ответ

3

, кажется, работает для меня

ruby-1.8.7-p249 > require 'uri' 
=> true 
ruby-1.8.7-p249 > require 'cgi' 
=> true 
ruby-1.8.7-p249 > uri = URI.parse("http://www.google.com/url?sa=X&q=http://nashville.broadwayworld.com/article/Just_in_time_for_Halloween_Circle_Players_does_JEKYLL_HYDE_20101013&ct=ga&cad=:s7:f1:v1:d2:i0:lt:e0:p0:t1286988171:&cd=yQoOdKUFTLo&usg=AFQjCNEg2inHF8hXGEvG-TxMQyMx7YGHkA") 
=> #<URI::HTTP:0x10127b288 URL:http://www.google.com/url?sa=X&q=http://nashville.broadwayworld.com/article/Just_in_time_for_Halloween_Circle_Players_does_JEKYLL_HYDE_20101013&ct=ga&cad=:s7:f1:v1:d2:i0:lt:e0:p0:t1286988171:&cd=yQoOdKUFTLo&usg=AFQjCNEg2inHF8hXGEvG-TxMQyMx7YGHkA> 
ruby-1.8.7-p249 > uri_params = CGI.parse(uri.query) 
=> {"cd"=>["yQoOdKUFTLo"], "sa"=>["X"], "cad"=>[":s7:f1:v1:d2:i0:lt:e0:p0:t1286988171:"], "ct"=>["ga"], "q"=>["http://nashville.broadwayworld.com/article/Just_in_time_for_Halloween_Circle_Players_does_JEKYLL_HYDE_20101013"], "usg"=>["AFQjCNEg2inHF8hXGEvG-TxMQyMx7YGHkA"]} 
ruby-1.8.7-p249 > uri_params['q'] 
=> ["http://nashville.broadwayworld.com/article/Just_in_time_for_Halloween_Circle_Players_does_JEKYLL_HYDE_20101013"] 
Смежные вопросы