Ruby on rails 根据需要自动进行URI解码

Ruby on rails 根据需要自动进行URI解码,ruby-on-rails,ruby,uri,decode,Ruby On Rails,Ruby,Uri,Decode,在ruby中,有没有一种方法可以解码“c”而不必解码两次就可以得到“a”字符串。我的观点是,我有一些字符串被编码两次,另一些字符串被编码一次。我想要一种自动解码为正常字符串的方法,自动识别解码的时间数。我在文档中找不到自动检测,但可以通过一个额外的#decode调用以以下方式实现: a = 'some string' b = URI.encode(a) # returns 'some%20string' c = URI.encode(b) # returns 'some%2520string'

在ruby中,有没有一种方法可以解码“c”而不必解码两次就可以得到“a”字符串。我的观点是,我有一些字符串被编码两次,另一些字符串被编码一次。我想要一种自动解码为正常字符串的方法,自动识别解码的时间数。

我在文档中找不到自动检测,但可以通过一个额外的
#decode
调用以以下方式实现:

a = 'some string'
b = URI.encode(a) # returns 'some%20string'
c = URI.encode(b) # returns 'some%2520string'

它将在
uri
上调用
#decode
,直到它停止对其进行任何更改。

我想实现这一点的唯一方法是继续解码,直到它停止进行更改。我对这类东西的看法是
do while
loop:

def decode_uri(uri)
  current_uri, uri = uri, URI.decode(uri) until uri == current_uri
  uri
end
我知道你要找的东西不存在

********编辑*************

关于stackoverflow的另一个重复问题的答案也表明了同样的情况 这对我来说很有用:

decoded = encoded
begin
  decoded = URI.decode(decoded) 
end while(decoded != URI.decode(decoded)  )

您可以尝试
URI.escape
URI.unescape
URI.unescape只执行一次unescape。我想按编码的次数取消扫描。您无法自动确定这一点。
def decode_uri(encoded)
  decoded = encoded
  begin
    decoded = URI.decode(decoded)
  end while(decoded != URI.decode(decoded))
  return decoded
end