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

Các trình duyệt không có vấn đề với http://dxczjjuegupb.cloudfront.net/wp-content/uploads/2017/10/Оуэн-Мэтьюс.jpg vì vậy tôi tự hỏi nếu lớp ruby ​​này là một chút lỗi thời và nên tôi hoàn toàn từ bỏ nó hay làm một số? xử lý lỗi ...Ruby: URI :: InvalidURIError (URI phải ascii chỉ

+2

chỉ vì trình duyệt của bạn ngầm URL mã hóa URL đó không có nghĩa rằng Ruby sẽ làm như vậy Trong Ruby bạn phải. tự mã hóa chính URL của mình – spickermann

Trả lời

5

câu trả lời chỉ đến với tôi bằng cách hỏi bản thân mình câu hỏi:

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

'uri = URI.parse (URI.escape (ur l)) 'là một câu trả lời tốt hơn. Khối 'rescue' là hoàn toàn dư thừa. – mudasobwa

+1

@mudasobwa Cẩn thận với việc thoát khỏi mọi thứ: 'uri = URI.parse (URI.escape ('http://example.com/not%20cool'))' yields '" http://example.com/not% 2520cool "' – tadman

+0

@tadman nó phụ thuộc vào những gì 'url' được xây dựng từ. Tôi tốt hơn nên có 'chiết khấu = 5%' được mã hóa chính xác :) – mudasobwa