2011-12-25 77 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 
相關問題