1

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

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

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

当我们单击此链接时,浏览器中的 url 显示为 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。

有什么办法可以避免这种情况。如何使浏览器中的 url 也显示为

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

在浏览器中?

4

1 回答 1

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
于 2011-12-28T14:25:58.547 回答