2011-12-18 90 views
10

我用他filter_var PHP函數來驗證郵件地址,當用戶註冊到我的網站PHP的filter_var電子郵件錯誤

,所以我用這個代碼的形式後:

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

後來我做的:

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

現在,當我的var_dump($電子郵件)

輸出:

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

我想知道爲什麼這不會返回false,我認爲雙引號是不可接受的爲什麼PHP說它是有效的?

回答

15

一個valid email address

的引用字符串可以作爲一個圓點 本地部分內分離實體或當最外引號是局地的最外 字符它可能存在份(例如ABC 「defghi」 名爲.xyz @ example.com或 "abcdefghixyz"@example.com允許ABC 「defghi」 [email protected]是 不;也不是ABC \ 「DEF \」 GHI @示例.COM)。

+5

感謝您的信息的詳細信息,我覺得這很可笑,他們允許這樣的字符 – fred 2011-12-18 17:17:03

+0

@fred不是每個人都說,寫英語。雙引號通常用於來自其他語言的字符。現在不是很可笑,呃? – Walf 2014-04-28 02:14:16

11

我有同樣的問題(見Dalmas爲什麼它是有效的),這裏是我如何固定它:

filter_var($email, FILTER_SANITIZE_EMAIL); 

如:

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

將輸出:

string(21) "[email protected]" 

然後,您可以使用您的驗證來驗證電子郵件。

你可以得到php site

+1

感謝您的答案,我想知道我該如何解決它。我的問題是要理解他們爲什麼允許它,我認爲它可笑,爲 – fred 2011-12-18 17:18:30

+0

歡迎您的解決方案,謝謝,我覺得它太但這是怎麼回事! – 2011-12-18 17:20:55