1

私のアプリは、URLが含まれるメールを送信します。URLには、暗号化されたクエリ文字列属性が含まれています。+ *のような記号になるように、暗号化された値をCGIでエスケープしました。などはエスケープされます。エスケープされたURLは期待どおりに電子メールに表示されますが、リンクをクリックすると、暗号化された値が復号化されます。

たとえば、メールのURLは次のとおりです

email = 5M%2BjE1G6UB26tw / Ah%2Bzr1%2BJSSxeAoP6j

このリンクをクリックすると、ブラウザのURLは http://development.com/activate/snJAmJxkMo3WZ1sG27Aq?album_id=2&email=5M+jE1G6UB26tw/Ah+zr1+JSSxeAoP6j&owner_id=4と表示されます。

email = 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

この状況を回避するために、電子メール属性を 16 進数でエンコードして、アルファベットと数字のみが含まれるようにしました。これらは、Hex エンコードおよびデコードするメソッドです。

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 に答える