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类是不是有点过时了?我是应该完全放弃它,还是应该做一些错误处理…
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类是不是有点过时了?我是应该完全放弃它,还是应该做一些错误处理…
6条答案
按热度按时间zynd9foi1#
通过问自己这个问题,我得到了答案:
3qpi33ja2#
随着所有
URI.escape
答案的认可(也称为URI.encode
),这些方法已经被Ruby 2.7正式淘汰--也就是说,当你使用它们时,它们现在会产生一个可见的URI.escape is obsolete
警告消息--以前它们刚刚被弃用。在Ruby 3.0中,这些方法已经完全删除,不再可用--甚至没有警告。不幸的是,就我所知,Ruby的标准库
URI
类没有提供任何替代方案来处理包含非ASCII字符的URI--这些字符如今都是如此常见--现在网络已经国际化。我想出的最佳解决方案是使用addressable gem,它包含我们应得的
URI
类-它处理世界上向它抛出的所有东西,并且您可以使用#display_uri
方法获得“HTTP安全”URI:Addressable::URI
还提供了各种好处,例如端口推断(您可以判断URL最初是否包含端口规范)和URL规范化(给定一个基本URL,获取一个可能的相对URL并生成一个绝对URL)。以下是如何将其与
net/http
一起使用:m2xkgtsf3#
你怎么想的:
yks3o0rb4#
您可以MapURL字符并对非ASCII字符进行转义。大概是这样的:
bxfogqkk5#
我也犯了同样的错误:
Ruby:URI::InvalidURIError(URI必须仅为ascii
使用我的代码,但我的错误是它是一个旧项目,i18n过时了。它被解决了,只需一个简单的:
p1iqtdky6#
这对我很管用