2011-12-25 40 views
1

我的应用程序发出一封电子邮件,其中包含一个URL。该url包含一个加密的查询字符串属性。我CGI转义加密的值,以便像+ *这样的符号。等等都逃脱了。按照预期,电子邮件中会出现转义的URL,但是当我们单击链接时,加密值将被解密。加密的查询字符串在电子邮件轨道

例如,在电子邮件中的网址如下: http://development.com/activate/snJAmJxkMo3WZ1sG27Aq?album_id=2&email=5M%2BjE1G6UB26tw/Ah%2Bzr1%2BJSSxeAoP6j&owner_id=4

电子邮件= 5M%2BjE1G6UB26tw/AH%2Bzr1%2BJSSxeAoP6j

当我们点击这个链接在浏览器的地址显示为 上http://development.com/activate/snJAmJxkMo3WZ1sG27Aq?album_id=2&email=5M+jE1G6UB26tw/Ah+zr1+JSSxeAoP6j&owner_id=4

电子邮件= 5M + jE1G6UB26tw/AH + ZR1 + JSSxeAoP6j

的+取代有空间。结果 PARAMS [:邮箱] = 5M jE1G6UB26tw /阿ZR1 JSSxeAoP6j

,给了我一个404

有没有什么方法可以让我避免这种情况。我怎样才能使浏览器的URL也出现

http://development.com/activate/snJAmJxkMo3WZ1sG27Aq?album_id=2&email=5M%2BjE1G6UB26tw/Ah%2Bzr1%2BJSSxeAoP6j&owner_id=4

在浏览器中

回答

0

为了避免这种情况,我使用十六进制编码了电子邮件属性,以便它只包含字母和数字。使用这些是十六进制编码和解码的方法。

convert string2hex: 
def hexdigest_to_string(string) 
string.unpack('U'*string.length).collect {|x| x.to_s 16}.join 
end 

convert hex2string 
def hexdigest_to_digest(hex) 
hex.unpack('a2'*(hex.size/2)).collect {|i| i.hex.chr }.join 
end 
相关问题