Ruby on rails 根据需要自动进行URI解码
在ruby中,有没有一种方法可以解码“c”而不必解码两次就可以得到“a”字符串。我的观点是,我有一些字符串被编码两次,另一些字符串被编码一次。我想要一种自动解码为正常字符串的方法,自动识别解码的时间数。我在文档中找不到自动检测,但可以通过一个额外的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'
#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