Ruby 转义URL';s(无双重转义)

Ruby 转义URL';s(无双重转义),ruby,url,browser,Ruby,Url,Browser,如何根据需要转义URL,而不进行双重转义 是否有一个Ruby库已经做到了这一点?我想知道WebKit或Chrome使用什么算法 两个例子: 此URL无效,因为未转义%:http://x.co/op&k=21%。如果您在URL栏中键入它,它知道如何转义它。(它是在幕后逃离“%”,对吗?) 如果您键入http://localhost:3000/?s=hello%20world进入浏览器后,它知道不要再次退出%20 我希望重用那些已经处理了浏览器必须处理的边缘情况的优秀代码。如果有必要,我不介意打

如何根据需要转义URL,而不进行双重转义

是否有一个Ruby库已经做到了这一点?我想知道WebKit或Chrome使用什么算法

两个例子:

  • 此URL无效,因为未转义
    %
    http://x.co/op&k=21%
    。如果您在URL栏中键入它,它知道如何转义它。(它是在幕后逃离“%”,对吗?)

  • 如果您键入
    http://localhost:3000/?s=hello%20world
    进入浏览器后,它知道不要再次退出
    %20

我希望重用那些已经处理了浏览器必须处理的边缘情况的优秀代码。如果有必要,我不介意打电话给外部图书馆


更新:是的,我知道。不需要告诉我语法。我的问题比这更难。

是否需要多次编码或解码取决于你自己。您是程序员,需要在处理URL时了解URL的状态

浏览器可以假定后面没有数字值的
%
是空的,应该转义。有关详细信息,请参阅“”

您可以使用Ruby的内置或gems进行编码/解码

require 'uri'

uri = URI.parse('http://x.co/op')
uri.query = URI.encode_www_form('k' => '21%')

puts uri.to_s # => http://x.co/op?k=21%25
或:


迄今为止,获奖者有:

  • :“返回一个规范化的URI对象。注意:此方法不尝试完全符合规范。它的存在主要是为了纠正其他人读取规范的错误,并处理缓存问题,因为多个不同的URI可能代表同一资源,不应多次缓存。”

  • :“将输入转换为URI。输入不必是有效的URI--该方法将使用试探法来猜测URI的用途。这不符合标准,只是用户友好。”

Re:“你是程序员,在按摩URL时需要知道URL处于什么状态。”以下是我所知道的——我使用的URL来自我无法控制的API。有些解析带有
URI.parse
,有些则没有。我想在输入端原谅你。感谢您提到可寻址的——这似乎更为宽容。回复:“是否需要多次编码或解码取决于您自己。”。。。我认为这可能是一种幼稚的说法。浏览器可以处理各种各样的“URL”——我已经看到这种做法被描述为“病态友好!”我正在寻找一个已经知道如何处理的库或算法——来处理我所描述的不确定性。如果幸运的话,
Addressable
将比Ruby内置的
URI
做得好得多——但我不会“期望”一个低级库来完成我需要的任务。Re:“浏览器可以假设后面没有数字值的%是空的,应该转义。”。。。正确的!这就是说,我怀疑有许多这样的“经验法则”可能已经编码和测试过了。我想知道WebKit或Chrome是如何做到这一点的,而不是自己动手。
require 'addressable/uri'

uri = Addressable::URI.parse('http://x.co/op')
uri.query_values = {'k' => '21%'}
puts uri.to_s # => "http://x.co/op?k=21%25"