我使用DMOZ的网址列表的主题,其中包含一些网址具有包含下划线的主机名.
例如:
608 <ExternalPage about="http://outer_heaven4.tripod.com/index2.htm">
609 <d:Title>The Outer Heaven</d:Title>
610 <d:Description>Information and image gallery of McFarlane's action figures for Trigun, Akira, Tenchi Muyo and other Japanese Sci-Fi animations.</d:Description>
611 <topic>Top/Arts/Animation/Anime/Collectibles/Models_and_Figures/Action_Figures</topic>
612 </ExternalPage>
Run Code Online (Sandbox Code Playgroud)
虽然这个网址可以在网络浏览器中使用(或者,至少在我的网站中也是如此:p),但根据标准,这是不合法的:
主机名可能不包含其他字符,例如下划线字符(_),
在尝试使用以下方法解析此类URL时会导致错误URI.parse
:
[2] pry(main)> require 'uri'
=> true
[3] pry(main)> URI.parse "http://outer_heaven4.tripod.com/index2.htm"
URI::InvalidURIError: the scheme http does not accept registry part: outer_heaven4.tripod.com (or bad hostname?)
from ~/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/uri/generic.rb:213:in `initialize'
Run Code Online (Sandbox Code Playgroud)
有没有替代URI.parse
我可以使用具有较低严格性而不仅仅是自己滚动?
the*_*Man 10
尝试Addressable :: URI.它比RFC更紧密地遵循RFC并且非常灵活.
require 'addressable/uri'
uri = Addressable::URI.parse('http://outer_heaven4.tripod.com/index2.htm')
uri.host
=> "outer_heaven4.tripod.com"
Run Code Online (Sandbox Code Playgroud)
我已将它用于某些项目,并对此感到满意.URI变得有点......生锈,需要TLC.其他人也评论过它:
http://www.cloudspace.com/blog/2009/05/26/replacing-rubys-uri-with-addressable/
几年前在Ruby开发人员中对URI的状态进行了相当多的讨论.我现在找不到它的链接,但有人建议使用Addressable :: URI作为替代品.我不知道是否有人加紧接管URI开发,或现在的情况.在我自己的代码中,我继续使用URI来处理简单的事情,并在URI被证明为我做错事时切换到Addressable :: URI.
归档时间: |
|
查看次数: |
2303 次 |
最近记录: |