什么是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)将根据建议逃避它。