2013-06-09 2 views

답변

0

URL에 값을 삽입하는 대신 올바른 문자를 입력하고 Ruby가 특수 문자의 가능한 인코딩을 처리하도록하십시오 :

실행 한 후
require 'uri' 

name = 'foo' 
number = 1 

uri = URI('https://api.twitter.com/1/statuses/user_timeline.json?include_entities=true&include_rts=true') 
uri.query = URI.encode_www_form(
    Hash[ 
    URI.decode_www_form(uri.query) 
    ].merge('name' => name, 'count' => number) 
) 

puts uri 

, 이것은 출력입니다 : 당신이 일 것 보간을 사용하여 URL에 값을 넣을 수 있습니다

https://api.twitter.com/1/statuses/user_timeline.json?include_entities=true&include_rts=true&name=foo&count=1 

시간의 90 % 동안, 당신은 포함해야 시간이있다 인코딩해야하는 문자 및 URL을 사용하려고하면 오류가 발생합니다.

URI 클래스는 쿼리를 인코딩하는 방법에 대한 스펙을 따르므로 이러한 문제는 발생하지 않습니다.

것은 아래로 속보, 당신은 어떻게 볼 수 있습니다 :

uri.query 
# => "include_entities=true&include_rts=true" 
URI.decode_www_form(uri.query) 
# => [["include_entities", "true"], ["include_rts", "true"]] 
Hash[URI.decode_www_form(uri.query)] 
# => {"include_entities"=>"true", "include_rts"=>"true"} 
Hash[URI.decode_www_form(uri.query)].merge('name' => name, 'count' => number) 
# => {"include_entities"=>"true", "include_rts"=>"true", "name"=>"foo", "count"=>1} 
URI.encode_www_form(Hash[URI.decode_www_form(uri.query)].merge('name' => name, 'count' => number)) 
# => "include_entities=true&include_rts=true&name=foo&count=1" 

편집 :

URI에 대한`decode_www_form '정의되지 않은 방법 모듈 (NoMethodError)

메신저 사용 루비 1.9

Addressable 보석을보세요. 그것은 아주 멋지게 한 후 더 많은 기능을 수행하고,이있어 내장 된 URI 클래스 :

require 'addressable/uri' 

name = 'foo' 
number = 1 

uri = Addressable::URI.parse('https://api.twitter.com/1/statuses/user_timeline.json?include_entities=true&include_rts=true') 
uri.query_values = uri.query_values.merge('name' => name, 'count' => number) 

puts uri 

과 같습니다이 인수와 함께 작동합니다

https://api.twitter.com/1/statuses/user_timeline.json?count=1&include_entities=true&include_rts=true&name=foo 
+0

그래서 내가 그것을 가지고 ... – user2466087

+0

정의되지 않은 메서드' decode_www_form 'for URI : Module (NoMethodError) – user2466087

+0

'decode_www_form'은 URI를위한 클래스 메소드이며 [Ruby 1.9.2부터] (http://www.ruby-doc.org/stdlib-1.9.2/libdoc)되었습니다. /uri/rdoc/index.html). 1.9.2 이전 버전의 Ruby를 사용하고 있습니까? 그렇지 않은 경우 코드 예제를 올바르게 구현하지 않았습니다. –

관련 문제