Для моего сценария подтверждения электронной почты я генерирую токен, выполняя адрес электронной почты пользователя через мою существующую функцию одностороннего шифрования, а затем отбирая 20 символов из середины. Я получаю токен от пользователя в виде переменной $ _GET или переменной $ _POST. Я столкнулся с «ошибкой», когда при вводе адреса электронной почты со знаком плюс (+), а затем этот токен возвращается от пользователя в виде переменной $ _GET, знак плюс преобразуется в пробел и хеш меняется, поэтому токен больше не совпадает.
Итак, мне интересно, как лучше обойти это? Избежать знака плюс? Преобразовать знак плюс? URL закодировать это? С какими другими персонажами это случится, когда я использую $ _GET?
Вот соответствующий код, если он полезен:
<?php
if (isset ($_GET['email'], $_GET['token'])) {
$email = strtolower (mysql_real_escape_string($_GET['email']));
$token = mysql_real_escape_string($_GET['token']);
$correctToken = substr (doEncrypt ($email), -26, -6);
}elseif (isset ($_POST['submit'])) {
$email = strtolower (mysql_real_escape_string($_POST['email']));
$token = mysql_real_escape_string($_POST['token']);
$correctToken = substr (doEncrypt ($email), -26, -6);
}
if (isset ($email, $token, $correctToken)){
if ($token == $correctToken) {
// Confirm user's email!
}
}
?>
Большое спасибо!
Билли
РЕДАКТИРОВАТЬ: ОК, поэтому самый большой вопрос на данный момент, является ли знак «плюс» единственным символом, который преобразуется в пробел при получении через $ _GET? Если это так, то, кажется, я мог бы просто добавить это в раздел $ _GET: $email = str_replace(' ', '+', $email);
Нет другой причины для пробела в адресе электронной почты, верно?
Еще раз спасибо,
Билли