2014-02-07 112 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