非拉丁字符的电子邮件地址验证

12

现在ICann允许使用非拉丁字符域名,那么我应该担心电子邮件验证吗?目前,我的网站使用php函数来确保每个电子邮件地址段中有一些字母数字字符集。这些其他字符集,如西里尔文、阿拉伯文和中文,是否会通过验证?是否有建议使用的php函数来实现此功能?


@John Conde:你已经打好了,请发布它,这样我们就可以投票支持其他内容了。 - salathe
嗯,这并不是一个很好的解决方案,但至少它解释了PHP目前在这个问题上的立场。希望提问者能选择一些之前问题中的解决方案。其中有一些很好的答案。 - John Conde
2
为什么不直接发送电子邮件并要求用户通过点击链接确认地址呢?这样可以避免很多麻烦。没有任何安全的方法可以保证用户提供给你的是正确的地址。即使它在语法上是正确的,人们仍然可以使用Mailinator或类似的服务来提供有效(但对你无用)的电子邮件地址。所以,为什么还要检查呢? - nico
3个回答

1

我认为最好的方法是使用适当的IDN函数将传入的字符串转换为ACE字符串(xn--xyz-blah.com)。如果该过程有效,则域名有效。否则,它无效。

有一个名为idn_to_ascii()的PHP函数可以执行此操作,但需要其他库。您必须查看它是否在您的系统上可用。

还有一个名为idn的外部Linux命令可以进行IDN转换。不过,我对此一无所知。

如果您只想使用PHP内置方法,delfuego在this question中提供了一个非常好的正则表达式。


0

FILTER_VALIDATE_EMAIL 在处理非多字节字符时似乎过于严格。 - El Yobo
1
过滤器FILTER_VALIDATE_EMAIL在PHP 7.1中支持FILTER_FLAG_EMAIL_UNICODE标志。请注意,根据文档(https://www.php.net/manual/en/filter.constants.php#constant.filter-flag-email-unicode)的说明,它仅允许电子邮件地址的本地部分包含Unicode字符。 - panK

0

ICANN并不允许非拉丁字符的电子邮件地址,而是来自IETF标准机构及其“EAI”工作组的新规范。

因此,从技术上讲,今天café@café.été是一个有效的电子邮件地址:非ASCII左部分,非ASCII域名,非ASCII顶级域名。

但是,很多现有的或者即将出现的代码将无法接受这些情况。当然,这是一个鸡生蛋的问题,因为想要使用它并看到许多网站拒绝后,人们会回到ASCII,这将显示对非ASCII的少量欣赏,因此进化很少。

ICANN有一个关于所有这些的倡议,称为“通用接受”,它不仅涉及IDN,甚至涉及新的gTLD,因为仍然有一些地方硬编码TLD,因此不会对几年前开放的新TLD做出反应,或者使用愚蠢的正则表达式,例如TLD必须是2或3个字符长,这是错误的。

您可以在https://uasg.tech/找到它。

它提供了各种公众建议和链接,从开发人员开始,因此列出了要做/不做的事情清单。

他们最近发表了一篇新文章,展示了基于 Alexa 的三年趋势中访问量最高的站点,并展示了它们允许或不允许哪种电子邮件地址:https://www.circleid.com/posts/20210712-acceptance-of-all-domain-names-in-open-source-software/ 报告在https://uasg.tech/wp-content/uploads/documents/UASG033-en-digital.pdf中更详细地介绍了 Java 和 Python 库以及它们对 IDN 的处理。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接