php url кодировать вопрос - PullRequest
5 голосов
/ 28 июля 2011

Я отправляю html-письмо при активации пользователя с помощью токена, который я кодирую с помощью rawurlencode ().

Итак, в письме появляется ссылка следующим образом:

<a href="http://site.com/auth?action=confirmActivation&amp;user=79&amp;token=zlKoFo%22f%27g%3FtUb%27%29Z~L1%25zKh%5EG%23_Aj%5Ckbbbd4fdb9121b50f643f12c937ab1c03d5f09861" target="_blank">Click here to activate your account</a>

Когда я нажимаю наПо этой ссылке URL моей страницы выглядит следующим образом:

http://site.com/auth?action=confirmActivation&user=79&token=zlKoFo%22f%27g%3FtUb%27%29Z~L1%25zKh^G%23_Aj%5Ckbbbd4fdb9121b50f643f12c937ab1c03d5f09861

Итак, токен до (так выглядит в моем письме):

zlKoFo%22f%27g%3FtUb%27%29Z~L1%25zKh%5EG%23_Aj%5Ckbbbd4fdb9121b50f643f12c937ab1c03d5f09861

Токен после:

zlKoFo%22f%27g%3FtUb%27%29Z~L1%25zKh^G%23_Aj%5Ckbbbd4fdb9121b50f643f12c937ab1c03d5f09861

Похоже, мой браузер автоматически выполняет какое-то преобразование при нажатии?Почему?

1 Ответ

3 голосов
/ 28 июля 2011

Это потому, что% 5E (^) urlen-кодируется PHP (который кодирует все не алфавитные символы кроме -_).Это не соответствует RFC.Браузер видит это и «исправляет» кодировку для соответствия RFC, декодируя все, а затем кодируя только те символы, которые вызывают проблемы в URL-адресах (^ не является одним из них).Php rawurlencode является RFC-совместимым, но на самом деле браузер не может сам RFC-совместимым, и может кодировать только такие вещи, как пробелы и ~, и т. Д. Я хотел бы предложить вам просто urldecode любой токен, который вы получаетеиспользуйте этот результат, который будет согласован в любом случае.Если у вас есть проблемные символы в токене, base64 закодируйте его , чтобы решить это.

...