2017-10-20 19 views
5
require 'uri' 
uri = URI.parse 'http://dxczjjuegupb.cloudfront.net/wp-content/uploads/2017/10/Оуэн-Мэтьюс.jpg' 

のブラウザでは、このルビークラスは少し古くなっていると私はそれを完全に放棄したり、いくつかの操作を行う必要がある場合ので、私は自分自身を求めているhttp://dxczjjuegupb.cloudfront.net/wp-content/uploads/2017/10/Оуэн-Мэтьюс.jpgで何の問題もありませんエラー処理...ルビー:?URI :: InvalidURIError(URIは、ASCIIでなければならないだけ

+2

ちょうどあなたのブラウザは暗黙的にURLがURLはRubyが同じことをするだろうことを意味しないことを符号化するためにRubyでは、あなたがする必要があります。明示的にURLをエンコードしてください。 – spickermann

答えて

5

ちょうど自分自身に質問を尋ねることによって私のところに来たの答え:

begin 
    uri = URI.parse(url) 
rescue URI::InvalidURIError 
    uri = URI.parse(URI.escape(url)) 
end 
+4

'uri = URI.parse(URI.escape(ur l)) 'が良い答えです。 'rescue'ブロックは絶対に冗長です。 – mudasobwa

+1

@mudasobwaすべてのものをエスケープすることに注意してください: 'uri = URI.parse(URI.escape( 'http://example.com/not%20cool'))'が '' http://example.com/not% 2520cool "' – tadman

+0

@tadmanそれは 'url'が何から構築されているかによって異なります。私は 'discount = 5%'が適切にコード化されている方がよいでしょう:) – mudasobwa

関連する問題