2009-07-23 17 views
2

PHP中是否有一个可以规范化电子邮件地址的函数?例如,如果情况不重要,则[email protected] - >[email protected],如果情况不是重要的话,那么[email protected]->[email protected]你如何规范PHP中的电子邮件地址?

我不知道什么时候应该将电子邮件地址视为“相同”的规则,所以我不想自己实现这一点。

+0

是否有理由这样做?在我看来,你并没有从这样做中获得任何收益......同时,由于他们的邮件主机很古怪,用户不会收到他们的电子邮件。 – 2011-12-14 03:36:03

回答

3

使用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); 
+0

+1 for filter_var() – Val 2009-07-23 00:39:53

+2

PHP的内置电子邮件验证过滤器只是使用正则表达式(一个非常简单的过滤器),我真的不相信它。看到这里的电子邮件不能用正则表达式验证的原因:http://stackoverflow.com/questions/201323/what-is-the-best-regular-expression-for-validating-email-addresses – soulmerge 2009-07-24 01:13:25

+0

非常有趣。 – 2009-07-24 01:53:43

-2

如果lowercasing是你正在寻找所有:strtolower()

+0

我只是举了一个例子。正如其他人指出的那样,案件在当地可能很重要。对于某个特定的地址是否有所不同... – allyourcode 2009-07-23 23:31:56

0

修剪掉所有的空格,然后与strtolower比较。这应该是完美的。

+0

从技术上讲,不,这并不“完美”。空白可以发生在有效的电子邮件地址中,但实际上可能几乎没有人会这样做。 – 2009-07-23 01:11:02

+0

我应该指定......当我说修剪时,我指的是电子邮件开头或结尾处的空白,这是无效的。话虽如此,任何主机仍然使用quoted-string-email-address?我刚刚尝试在几个地方注册一个,但没有被接受为有效,我发现的任何形式验证都没有考虑到这一点。所以,我所说的话是真实的,除了最极端的情况外,*应该*对所有人都适用。 – 2009-07-23 12:35:14

-1

编辑:基于另一个答案,只声明域是不区分大小写的我已经更新了函数,只有小写域而不是用户。

function NormalizeEmail($email) 
{ 
    list($user, $domain) = explode('@', trim($email)); 
    return $user . '@' . strtolower($domain); 
} 
10

维基百科总结了各种RFC对于应该如何形成email address的说法。

不管别人怎么说,电子邮件可以区分大小写

本地部分是区分大小写的,因此“[email protected]”和“[email protected]”可以交付给不同的人。 RFC 5321不鼓励这种做法。但是,只有域的授权邮件服务器可以做出决定。唯一的例外是对于不区分大小写的“postmaster”的本地部分值,并且应该被转发给服务器的管理员。

将本地部分指的是地址的一部分@符号的左侧。因此,就您的特定关注点(个案标准化)而言,您可以小写服务器部分(位于@的右侧),但最适合您(由@,strToLower服务器组件重新组合)分开。

2

如果你愿意,你可以用用strtolower(),它可以正确地覆盖大部分的电子邮件。但这里是一些额外的信息,如果你想这样做是正确:

的电子邮件地址由两个部分组成:一本地部分(@前的任何东西),和(后@任何东西)域。本地部分意味着由领域部分给出的域的邮件服务器来解释,所以你实际上不能对该假设做任何假设(例如!)。

许多邮件服务器提供的adding arbitrary comments to your user name with a plus sign的选项,如下所示:

[email protected]om 

对于一个邮件服务器[email protected][email protected][email protected]可能是同一个邮箱,而另一个则可能指向两个或三个不同的邮箱,但事实是:你不知道。您在整个地址上进行的任何翻译都可能导致地址无效。

2

这只是其他答案的补充。

在gmail的情况下,我会删除左侧的小圆点。

Gmail只允许为任何给定用户名注册一次。注册用户名后,无论是否包含额外的句号或大写字母,其他用户都无法注册相同的用户名;这些用户名属于你。如果您创建了[email protected],则无法注册[email protected][email protected]。由于Gmail不会将点识别为用户名中的字符,因此您可以在不更改实际目标地址的情况下添加或删除Gmail地址中的点;他们都会去你的收件箱,只有你的收件箱。

所以你可以肯定你总是有相同的gmail电子邮件。

相关问题