现在ICann允许使用非拉丁字符域名,那么我应该担心电子邮件验证吗?目前,我的网站使用php函数来确保每个电子邮件地址段中有一些字母数字字符集。这些其他字符集,如西里尔文、阿拉伯文和中文,是否会通过验证?是否有建议使用的php函数来实现此功能?
现在ICann允许使用非拉丁字符域名,那么我应该担心电子邮件验证吗?目前,我的网站使用php函数来确保每个电子邮件地址段中有一些字母数字字符集。这些其他字符集,如西里尔文、阿拉伯文和中文,是否会通过验证?是否有建议使用的php函数来实现此功能?
我认为最好的方法是使用适当的IDN函数将传入的字符串转换为ACE字符串(xn--xyz-blah.com
)。如果该过程有效,则域名有效。否则,它无效。
有一个名为idn_to_ascii()
的PHP函数可以执行此操作,但需要其他库。您必须查看它是否在您的系统上可用。
还有一个名为idn
的外部Linux命令可以进行IDN转换。不过,我对此一无所知。
如果您只想使用PHP内置方法,delfuego在this question中提供了一个非常好的正则表达式。
filter_var()
和 FILTER_VALIDATE_EMAIL
过滤器,但是经过谷歌搜索后发现它暂不支持多字节字符。看起来目前你最好的选择是剥离非拉丁字符并对其执行通常的验证(尽管checkdnsrr显然会失败,因为您已通过将非拉丁字符替换为其拉丁等效字符来更改域,所以如果您使用该方法来验证电子邮件域的 MX 记录,则需要暂时禁用它)。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 的处理。