根据需要自动进行URI解码

时间:2013-08-21 10:38:01

标签: ruby-on-rails ruby uri decode

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

在ruby中是否有一种方法可以解码'c',它可以让我找到'a'字符串而无需解码两次。我的观点是,我有一些编码两次的字符串和一些编码一次的字符串。我想要一种自动解码为普通字符串的方法,自动识别解码的时间。

3 个答案:

答案 0 :(得分:10)

我想实现这一目标的唯一方法是继续解码,直到它停止进行更改。我对这类东西的吸引力是do while循环:

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

恕我直言,你所寻找的东西是不存在的。

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

对stackoverflow的另一个重复问题的答案也暗示相同 How to find out if string has already been URL encoded?

答案 1 :(得分:2)

我无法在文档中找到自动检测,但可以通过以下#decode调用以下方式实现此操作:

def decode_uri(uri)
  current_uri, uri = uri, URI.decode(uri) until uri == current_uri
  uri
end

会在#decode上致电uri,直到它停止对其进行任何更改。

答案 2 :(得分:0)

这对我有用:

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