2010-05-24 101 views
11

既然ICann允許非拉丁字符域名,我應該關心電子郵件驗證嗎?目前,我的網站正在使用php函數來確保在電子郵件地址的每個段中設置一些字母數字字符集。這些其他字符集,例如西里爾文,阿拉伯文和中文是否會通過驗證?有沒有建議使用PHP功能?非拉丁郵件地址驗證

+0

+1 ex:'info @müller.de' – 2010-05-24 18:24:30

+0

@John Conde:你已經輸入了它,請發佈它,以便我們可以註冊除了你的評論以外的東西。 – salathe 2010-05-24 19:49:05

+0

嗯,這不是一個很好的解決方案,但至少它解釋了PHP目前站在這個地方。希望發問者爲他們以前的問題選擇一些解決方案。他們有一些很好的答案。 – 2010-05-24 20:13:57

回答

0

我打算推薦使用filter_var()FILTER_VALIDATE_EMAIL過濾器。但在谷歌搜索後,它變成了doesn't support multi-byte characters呢。現在看來,最好的辦法是strip out non-latin characters並對此進行通常的驗證(儘管checkdnsrr顯然會失敗,因爲您已經通過刪除非拉丁字符並將它們替換爲拉丁等號來更改域名,所以如果您使用它來驗證電子郵件域的MX記錄,那麼您將需要暫時禁用該記錄)。

+0

即使處理非多字節字符,FILTER_VALIDATE_EMAIL也顯得過於嚴格。 – 2010-05-25 06:17:27

1

我認爲最終最好的方法是使用正確的IDN函數將傳入的字符串轉換爲ACE字符串(xn--xyz-blah.com)。如果該過程起作用,則域名是有效的。如果不是,它不是。

有一個名爲idn_to_ascii()的PHP函數執行此操作,但它需要額外的庫。您必須查看它是否在您的系統上可用。

似乎還有一個名爲idn的外部Linux命令進行IDN轉換。不過,我對此還不甚瞭解。

如果您只想使用PHP內置方法,delfuego會在this question中提供一個非常好的正則表達式。