2011-12-25 3 views
1

Мое приложение отправляет электронное письмо с URL-адресом в нем. URL-адрес содержит атрибут строки запроса, который зашифрован. I CGI избежал зашифрованного значения, чтобы символы вроде + *. и т. д. экранированы. Экранированный URL-адрес появляется в письме, как и ожидалось, но когда мы нажимаем на ссылку, зашифрованные значения дешифруются.Зашифрованная строка запроса в письмах rails

Для примера, URL-адрес в электронной почте выглядит следующим образом http://development.com/activate/snJAmJxkMo3WZ1sG27Aq?album_id=2&email=5M%2BjE1G6UB26tw/Ah%2Bzr1%2BJSSxeAoP6j&owner_id=4

электронная почта = 5M% 2BjE1G6UB26tw/Ач% 2Bzr1% 2BJSSxeAoP6j

когда мы щелкаем по ссылке URL-адрес в браузере появляется как http://development.com/activate/snJAmJxkMo3WZ1sG27Aq?album_id=2&email=5M+jE1G6UB26tw/Ah+zr1+JSSxeAoP6j&owner_id=4

электронная почта = 5M + jE1G6UB26tw/А + 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

Чтобы избежать этой ситуации, Hex закодировал атрибут электронной почты, чтобы он содержал только алфавиты и цифры. Используются эти методы для кодирования и декодирования 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 
Смежные вопросы