什么是nokogiri%编码$ character

为什么我得到:

Nokogiri::HTML('test').to_html => "\ntest\n" 

我以为$符号在url中有效?

跟进:

为什么浏览器会以不同方式处理 例如,在页面中: http : //www.pmlive.com/pharma_news/its_on_shire_and_abbvie_agree_32bn_takeover_586969

链接: http ://www.pmlive.com/pharma_news/mylan_buys_abbotts_non-us_generics_in_ $ 53bn_deal_585883有效。

但是nokogiri会将此链接解析为: http ://www.pmlive.com/pharma_news/mylan_buys_abbotts_non-us_generics_in_%245.3bn_deal_585883这不起作用(返回404)。

他们是否决定$实际上是安全的并且是更好的选择?

这里有RFC3986,它将美元符号列为保留的子分隔符(第12页)。

reserved = gen-delims / sub-delims

gen-delims =“:”/“/”/“?” /“#”/“[”/“]”/“@”

sub-delims =“!” /“$”/“&”/“’”/“(”/“)”/“*”/“+”/“,”/“;” /“=”

它还建议如何处理保留字符:

2.2。 保留字符

URI包括由“保留”集中的字符分隔的组件和子组件。 这些字符称为“保留”,因为它们可能(或可能不)通过通用语法,每种特定于方案的语法或URI的解除引用算法的特定于实现的语法定义为分隔符。 如果URI组件的数据与保留字符作为分隔符的目的冲突,则冲突数据必须在形成URI之前进行百分比编码。

Nokogiri喜欢的作者认为,由于他们的图书馆可能被任何人用于任何目的,因此没有办法自动确定保留字符是否会发生冲突,因此是“最安全”的处理方式(不测试直接URI)将根据建议逃避它。