ссылка в письме со специальными символами (php) - PullRequest
0 голосов
/ 13 октября 2019

Моя страница "Забыли пароль" отправляет пользователю электронное письмо (через PHPMailer ver-6.1.1) со ссылкой, содержащей его адрес электронной почты.
Затем он должен щелкнуть ссылку, которая открывает мой "resetPassword.php" страница, где он может сбросить свой пароль, в соответствии с адресом электронной почты, указанным в ссылке.

Работает нормально, но НЕ с адресами электронной почты, содержащими знак плюс (+) (или любым другим специальным символом, в этом отношении).

Соответствующий код JS для отправки почты:

$body="http://localhost/myApp/resetPassword.php?frgt_psw_email=xxxx+1@gmail.com";

, который является именно ссылкой в ​​полученном письме.

Пока все хорошо.

При нажатии на ссылку пользователь переносится на страницу «resetPassword», где первое, что я делаю (для целей отладки):

echo $_GET['frgt_psw_email'];
exit();

Что я получаю: xxxx 1@gmail.com. Как видите, знак плюс заменяется пробелом, поэтому функция resetPassword не работает.

Я попытался заменить знак + на htmlentities, но это не помогло.
Я также попытался добавить к своим параметрам PHPMailer:

$mail->CharSet  = 'UTF-8';
$mail->Encoding = 'quoted-printable';

, который тоже не помог.

Пожалуйста, потерпите меня - я новичок в PHP и JS ...
Спасибо!

1 Ответ

3 голосов
/ 13 октября 2019

A + является зарезервированным символом URL. Вам необходимо кодировать значения строки запроса, https://www.php.net/manual/en/function.urlencode.php.

$body="http://localhost/myApp/resetPassword.php?frgt_psw_email=" . urlencode('xxxx+1@gmail.com');
...