Почему PHP filter_var говорит, что это действительный адрес электронной почты? - PullRequest
10 голосов
/ 18 декабря 2011

Я использую PHP-функцию filter_var для проверки адреса электронной почты, когда пользователь регистрируется на моем сайте.

Я использую этот код из поста:

$email = filter_var($_POST['email'], FILTER_VALIDATE_EMAIL);

потом я делаю:

if(!$email) {
  // return to the form 
}
else {
  // send registration info
}

Теперь, когда я var_dump($email), я получаю вывод:

string(23) "user."name"@example.com"

Я хотел бы знать, почему это не возвращает false. Я думаю, что двойные кавычки недопустимы, так почему PHP говорит, что они действительны?

Ответы [ 2 ]

15 голосов
/ 18 декабря 2011

Это - это a действительный адрес электронной почты :

Строка в кавычках может существовать как точка, разделенная точкой, внутри локальной части или может существоватькогда самые внешние кавычки являются внешними символами локальной части (например, abc. "defghi" .xyz @ example.com или "abcdefghixyz"@example.com разрешены. abc "defghi" xyz@example.com нет; ниis abc \ "def \" ghi@example.com).

11 голосов
/ 18 декабря 2011

У меня была та же проблема (см. Dalmas о том, почему она действительна), и вот как я ее исправил:

filter_var($email, FILTER_SANITIZE_EMAIL);

Например:

$email = 'user."name"@example.com';
$email = filter_var($email, FILTER_SANITIZE_EMAIL);

выведет:

string(21) "user.name@example.com"

Затем вы можете проверить электронную почту, используя вашу проверку.

Вы можете получить дополнительную информацию на php сайте

...