使用PHP FILTER_VALIDATE_EMAIL
时允许的最大字符长度是多少?
我正在测试我的脚本以测试我允许的最大长度(200)的功能,但是当我使用超过200个字符的电子邮件时,PHP的FILTER_VALIDATE_EMAIL
返回false。
答案 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