2011-12-18 14 views
10

używam on filter_var funkcji php do sprawdzania poprawności adresu e-mail, gdy użytkownik zapisać się na mojej stroniephp błąd email filter_var

więc używać tej postaci kodu stanowisko:

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

potem ja zrobić:

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

teraz kiedy var_dump ($ email)

wyjściowa:

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

Chciałbym wiedzieć, dlaczego to nie zwraca false, myślę, że podwójne cytaty są nie do przyjęcia, dlaczego PHP mówią, że to jest ważne?

Odpowiedz

15

to jestvalid email address:

ciąg w cudzysłowach mogą występować jako oddzielone jednostki kropka w miejscowego część lub może występować wtedy, gdy najbardziej oddalone cytaty są najbardziej oddalone znaki z sieć lokalną część (np. abc. "defghi" .xyz @ example.com lub "abcdefghixyz"@example.com są dozwolone. abc" defghi "[email protected] to nie, nie jest też abc \" def \ "ghi @ przykład .com).

+5

Dzięki za info, myślę, że to śmieszne pozwalają one takie znaki – fred

+0

@fred Nie każdy mówi i pisze po angielsku. Podwójne cytaty są często używane w przypadku znaków z innych języków. Nie tak śmieszne, co? – Walf

11

miałem ten sam problem (patrz Dalmas dlaczego jest to ważne) i oto jak naprawiłem go:

filter_var($email, FILTER_SANITIZE_EMAIL); 

np

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

wyjście wola:

string(21) "[email protected]" 

Następnie można sprawdzić pocztę e-mail za pomocą sprawdzania oryginalności.

można uzyskać więcej informacji na temat php site

+1

dzięki za odpowiedź, zastanawiałem się, jak mogę to naprawić. moim problemem jest zrozumienie, dlaczego są one dozwolone, co myślę, że to śmieszne, dzięki za rozwiązanie – fred

+0

witamy, myślę, że to jest zbyt, ale tak to jest! –