PHP中是否有一个可以规范化电子邮件地址的函数?例如,如果情况不重要,则[email protected]
- >[email protected]
,如果情况不是重要的话,那么[email protected]
->[email protected]
。你如何规范PHP中的电子邮件地址?
我不知道什么时候应该将电子邮件地址视为“相同”的规则,所以我不想自己实现这一点。
PHP中是否有一个可以规范化电子邮件地址的函数?例如,如果情况不重要,则[email protected]
- >[email protected]
,如果情况不是重要的话,那么[email protected]
->[email protected]
。你如何规范PHP中的电子邮件地址?
我不知道什么时候应该将电子邮件地址视为“相同”的规则,所以我不想自己实现这一点。
使用strtolower()使服务器部分成为小写。 (更新由于以前的答案)
$parts = explode("@", $email);
$host = strtolower($parts[1]);
$email = $parts[0]."@".$host;
另外,如果你想以规范的格式藏汉,你可能想看看filter_var(),可以sanatize /验证电子邮件地址,与其他几种格式一起。
首先,FILTER_SANITIZE_EMAIL将确保其中没有非法字符。
$email_sanatized = filter_var('[email protected]', FILTER_SANITIZE_EMAIL);
然后,FILTER_VALIDATE_EMAIL将确保它是在一个有效的电子邮件格式
$email = filter_var($email_sanatized, FILTER_VALIDATE_EMAIL);
如果lowercasing是你正在寻找所有:strtolower()
。
我只是举了一个例子。正如其他人指出的那样,案件在当地可能很重要。对于某个特定的地址是否有所不同... – allyourcode 2009-07-23 23:31:56
修剪掉所有的空格,然后与strtolower
比较。这应该是完美的。
从技术上讲,不,这并不“完美”。空白可以发生在有效的电子邮件地址中,但实际上可能几乎没有人会这样做。 – 2009-07-23 01:11:02
我应该指定......当我说修剪时,我指的是电子邮件开头或结尾处的空白,这是无效的。话虽如此,任何主机仍然使用quoted-string-email-address?我刚刚尝试在几个地方注册一个,但没有被接受为有效,我发现的任何形式验证都没有考虑到这一点。所以,我所说的话是真实的,除了最极端的情况外,*应该*对所有人都适用。 – 2009-07-23 12:35:14
编辑:基于另一个答案,只声明域是不区分大小写的我已经更新了函数,只有小写域而不是用户。
function NormalizeEmail($email)
{
list($user, $domain) = explode('@', trim($email));
return $user . '@' . strtolower($domain);
}
维基百科总结了各种RFC对于应该如何形成email address的说法。
不管别人怎么说,电子邮件可以区分大小写
本地部分是区分大小写的,因此“[email protected]”和“[email protected]”可以交付给不同的人。 RFC 5321不鼓励这种做法。但是,只有域的授权邮件服务器可以做出决定。唯一的例外是对于不区分大小写的“postmaster”的本地部分值,并且应该被转发给服务器的管理员。
将本地部分指的是地址的一部分@符号的左侧。因此,就您的特定关注点(个案标准化)而言,您可以小写服务器部分(位于@的右侧),但最适合您(由@,strToLower服务器组件重新组合)分开。
如果你愿意,你可以用用strtolower(),它可以正确地覆盖大部分的电子邮件。但这里是一些额外的信息,如果你想这样做是正确:
的电子邮件地址由两个部分组成:一本地部分(@前的任何东西),和(后@任何东西)域。本地部分意味着由领域部分给出的域的邮件服务器来解释,所以你实际上不能对该假设做任何假设(例如!)。
许多邮件服务器提供的adding arbitrary comments to your user name with a plus sign的选项,如下所示:
[email protected]om
对于一个邮件服务器[email protected]
,[email protected]
和[email protected]
可能是同一个邮箱,而另一个则可能指向两个或三个不同的邮箱,但事实是:你不知道。您在整个地址上进行的任何翻译都可能导致地址无效。
这只是其他答案的补充。
在gmail的情况下,我会删除左侧的小圆点。
Gmail只允许为任何给定用户名注册一次。注册用户名后,无论是否包含额外的句号或大写字母,其他用户都无法注册相同的用户名;这些用户名属于你。如果您创建了[email protected],则无法注册[email protected]或[email protected]。由于Gmail不会将点识别为用户名中的字符,因此您可以在不更改实际目标地址的情况下添加或删除Gmail地址中的点;他们都会去你的收件箱,只有你的收件箱。
所以你可以肯定你总是有相同的gmail电子邮件。
是否有理由这样做?在我看来,你并没有从这样做中获得任何收益......同时,由于他们的邮件主机很古怪,用户不会收到他们的电子邮件。 – 2011-12-14 03:36:03