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

Przeglądarki nie mają problemu z http://dxczjjuegupb.cloudfront.net/wp-content/uploads/2017/10/Оуэн-Мэтьюс.jpg więc pytam się, czy ta klasa rubin jest trochę przestarzałe i mam całkowicie wyrzec się go lub zrobić kilka? obsługa błędów ...Ruby: URI :: InvalidURIError (URI musi być ASCII tylko

+2

tylko dlatego, że Twoja przeglądarka domyślnie URL koduje że URL nie znaczy, że Ruby byłoby zrobić to samo w Ruby trzeba. jawnie zakoduj sam adres URL: – spickermann

Odpowiedz

5

odpowiedź właśnie przyszedł do mnie zadając sobie pytanie:

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

'uri = URI.parse (URI.escape (ur l)) 'jest lepszą odpowiedzią. Blok 'rescue' jest absolutnie nadmiarowy. – mudasobwa

+1

@mudasobwa Uważaj na ucieczkę przed wszystkimi rzeczami: 'uri = URI.parse (URI.escape ('http://example.com/not%20cool'))' daje '' http://example.com/not% 2520cool "' – tadman

+0

@tadman to zależy od tego, z czego zbudowany jest 'url'. Lepiej, żeby kod "discount = 5%" był poprawnie zakodowany :) – mudasobwa