2014-02-07 113 views
1

使用PHP的FILTER_VALIDATE_EMAIL時允許的字符的最大長度是多少?PHP FILTER_VALIDATE_EMAIL最大長度

我正在測試腳本以測試允許的最大長度(200)的函數,但是當我使用超過200個字符的電子郵件時,PHP的FILTER_VALIDATE_EMAIL返回false。

+0

嗯。你的測試數據是什麼。 –

回答

8

如果電子郵件真的有效,那麼它應該適用於您的200多個字符的電子郵件數據。你確定你正在提供一個有效的電子郵件嗎?

條件有效的電子郵件:

電子郵件地址的最大長度爲254個字符。

每個電子郵件地址由兩部分組成。本地部分出現在「@」符號之前,域部分跟隨它。在「[email protected]」中,本地部分是「用戶」,域部分是「example.com」。

本地部分不能超過64個字符,並且

域部分不能超過255個字符長;

但是,所有字符(包括'@'和標點符號)的總長度不能超過254個字符。

總之,電子郵件地址最多可以是254個字符。創建地址時,請確保您的用戶名少於65個字符(如果該域最多爲188個字符)。

+0

這就是我正在尋找的東西。原來,這是因爲我正在測試一個長度超過64個字符的「本地部分」。 –

+0

葉普,與當地的信息非常有幫助! – Basster

0

看起來'域可以長達254個字符'部分是不正確的。這裏是我的測試數據

<?php 
$str = 'garahasgcdotrrriefvdqvegtartfhpnlwizanrhcqirnqllicyjhttvdylvkqccpljzrgledgqpjbttgwbqwgtkytkjxtufqcermdywzthceowyurrlmvvbiljraidwnmznazymwcjdozfaauzcnlwsxqfzgpzbsru1234567890ukxzqsvowzhnwnzzdzokhcffkpdvwycpcmxdknjvaakqjgjkvtqctpkhvgmeytsypkrfozeljsochfjvlszrwutiq'; 

$local = substr($str, 0, 64); 
$domain = substr($str, 0, 63); 
$com = substr($str, 0, 63); 

$email = $local. '@' . $domain . '.' . $com; 
$is_valid = filter_var($email , FILTER_VALIDATE_EMAIL); 

上面的代碼返回TRUE。但是如果我嘗試增加$ domain或$ com,它就會失敗。根據以上評論,我當然不能增加本地費用。

所以完全只接受192個字符。

更新:

回答我自己的答案/問題上面:

看起來像254字符域規則需要進一步的解釋。

看起來像PHP用來允許超過63個字符到子域,直到PHP 5.3.2。當https://bugs.php.net/bug.php?id=49576作爲PHP 5.3.3發行版的一部分進入時,它改變了這種行爲。

所以我們可以有最大長度爲63個字符的子域。然而域部分的所有總長度可以達到254

地方[64]與@subdomain [63] .subdomain [63] .subdomain [63]是有效的,但不是 本地[ 64] @subdomain [65] .subdomain [63]

域部分中的每個點都是最多可以有63個字符的子域。

這裏是一個示例代碼,顯示了上述理論(一直工作到5.3.2和5.3.3自停止工作) - http://3v4l.org/tnUR9#v5214