a = 'some string'
b = URI.encode(a) # returns 'some%20string'
c = URI.encode(b) # returns 'some%2520string'
在ruby中是否有一种方法可以解码'c',它可以让我找到'a'字符串而无需解码两次。我的观点是,我有一些编码两次的字符串和一些编码一次的字符串。我想要一种自动解码为普通字符串的方法,自动识别解码的时间。
答案 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