我的应用会发送一封包含网址的电子邮件。 url包含加密的查询字符串属性。我CGI转义了加密值,使符号像+ *。等逃脱。转义的网址会按预期显示在电子邮件中,但是当我们点击该链接时,加密的值会被解密。
例如,电子邮件中的网址如下 http://development.com/activate/snJAmJxkMo3WZ1sG27Aq?album_id=2&email=5M%2BjE1G6UB26tw/Ah%2Bzr1%2BJSSxeAoP6j&owner_id=4
电子邮件= 5M%2BjE1G6UB26tw /阿%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 [:email] = 5M jE1G6UB26tw / Ah zr1 JSSxeAoP6j
给了我一个404.
有什么方法可以避免这种情况。如何使浏览器中的网址也显示为
在浏览器中?
答案 0 :(得分: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