2017-10-20 74 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所以我问自己,如果这个Ruby类是一点点过时没有问题,我应该彻底放弃,或做一些?错误处理...红宝石:URI :: InvalidURIError(URI必须是ASCII只

+2

仅仅因为你的浏览器隐含URL编码URL并不意味着红宝石会做同样的在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))'是一个更好的答案。 “救援”区块绝对是多余的。 – mudasobwa

+1

@mudasobwa小心避开所有的东西:'uri = URI.parse(URI.escape('http://example.com/not%20cool'))'yield'“http://example.com/not% 2520cool“' – tadman

+0

@tadman它取决于'url'的构建内容。我最好有'折扣= 5%''正确编码:) – mudasobwa