2011-12-25 17 views
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 /ああ%2Bzr1%2BJSSxeAoP6j

ブラウザでURLが として表示されます= 5M + jE1G6UB26tw /ああ+のZR1 + JSSxeAoP6j

+ http://development.com/activate/snJAmJxkMo3WZ1sG27Aq?album_id=2&email=5M+jE1G6UB26tw/Ah+zr1+JSSxeAoP6j&owner_id=4

電子メールはスペースで置換されています。その結果 のparams [:電子メール]は5M jE1G6UB26tw /ああZR1を=私に404

を与えるJSSxeAoP6j

は、私はこのような状況を避けることができる方法はあります。どのように私は、ブラウザのURLは、ブラウザで

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

として表示させることができますか?

答えて

0

このような状況を回避するために、メール属性にはアルファベットと数字だけが含まれるようにメール属性がエンコードされています。これらは、16進数のエンコードとデコードのためのメソッドです。

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 
関連する問題