Зашифрованная строка запроса в рельсах электронной почты
Мое приложение отправляет электронное письмо с 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-адрес в браузере отображается как http://development.com/activate/snJAmJxkMo3WZ1sG27Aq?album_id=2&email=5M+jE1G6UB26tw/Ah+zr1+JSSxeAoP6j&owner_id=4
электронная почта = 5M + jE1G6UB26tw / А + ZR1 + JSSxeAoP6j
+ Заменяется пробелом. В результате params[:email] = 5M jE1G6UB26tw/Ah zr1 JSSxeAoP6j
что дает мне 404.
Есть ли способ, которым я могу избежать этой ситуации. Как сделать так, чтобы URL в браузере также отображался как
в браузере?
1 ответ
Чтобы избежать этой ситуации, я Hex закодировал атрибут email так, чтобы он содержал только буквы и цифры. Используются эти методы для шестнадцатеричного кодирования и декодирования.
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