PHP FILTER_VALIDATE_EMAIL最大长度

时间:2014-02-07 15:19:04

标签: php

使用PHP FILTER_VALIDATE_EMAIL时允许的最大字符长度是多少?

我正在测试我的脚本以测试我允许的最大长度(200)的功能,但是当我使用超过200个字符的电子邮件时,PHP的FILTER_VALIDATE_EMAIL返回false。

2 个答案:

答案 0 :(得分:11)

如果电子邮件真的有效,那么它应该可以正常使用200多个字符的电子邮件数据。您确定要提供有效的电子邮件吗?

有效电子邮件的条件:

电子邮件地址的最大长度为254个字符。

每个电子邮件地址由两部分组成。本地部分出现在' @'之前。标志,域名部分跟随它。在" user@example.com"中,本地部分是"用户",域部分是" example.com"。

本地部分不得超过64个字符

域名部分不得超过255个字符;

但是,所有字符的总合计长度(包括' @'和标点符号)不得超过254个字符。

总之,电子邮件地址最多可以包含254个字符。创建地址时,请确保您的用户名少于65个字符(如果域名最多为188个字符)。

答案 1 :(得分:2)

看起来这个'域最多可以包含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,它就会失败。当然,根据上述评论,我无法增加$ local。

总而言之,它只接受192个字符。

<强>更新

回答上面我自己的回答/问题:

看起来域规则的254个字符需要进一步说明。

看起来PHP在PHP 5.3.2之前允许超过63个字符到子域。当https://bugs.php.net/bug.php?id=49576作为PHP 5.3.3版本的一部分进入时,它改变了这种行为。

所以我们可以拥有最大长度为63个字符的子域。但是,域部分的所有总长度可以达到254.

例如

local [64] @subdomain [63] .subdomain [63] .subdomain [63]有效,但不是 本地[64]与@subdomain [65] .subdomain [63]

域部分中的每个点都是子域,最多可包含63个字符。

以下是显示上述理论的示例代码(工作到5.3.2并从5.3.3停止工作) - http://3v4l.org/tnUR9#v5214