既然ICann允许使用非拉丁字符的域名,我是否应该关注电子邮件验证?目前,我的网站使用php函数来确保在电子邮件地址的每个段中设置一些字母数字字符集。这些其他字符集,例如西里尔字母,阿拉伯语和中文,会通过验证吗?是否有推荐的PHP函数用于此目的?
答案 0 :(得分:1)
我认为最好的方法是使用正确的IDN函数将传入的字符串转换为ACE字符串(xn--xyz-blah.com
)。如果该过程有效,则域名有效。如果没有,则不是。
有一个名为idn_to_ascii()
的PHP函数可以执行此操作,但它需要其他库。你必须看看它是否在你的系统上可用。
似乎还有一个名为idn
的外部Linux命令可以进行IDN转换。不过,我对此一无所知。
如果您只想使用PHP内置方法,delfuego在this question中提供了一个非常好的正则表达式。
答案 1 :(得分:0)
我建议将filter_var()
与FILTER_VALIDATE_EMAIL
过滤器一起使用。但在谷歌搜索之后,它还是doesn't support multi-byte characters。看起来,现在,您最好的选择是strip out non-latin characters并执行通常的验证(尽管checkdnsrr显然会失败,因为您通过删除非拉丁字符更改了域并更换了它们具有拉丁语等价物,因此如果您使用它来验证电子邮件域的MX记录,那么您将需要暂时禁用它。)
答案 2 :(得分:0)
不是 ICANN 允许非拉丁电子邮件地址,而是来自 IETF 标准机构及其“EAI”工作组的新规范的到来。
所以,是的,从技术上讲,今天,café@café.été
是一个有效的电子邮件地址:非 ASCII 左侧部分、非 ASCII 域、非 ASCII TLD。
但是,很多现有的,甚至是新的代码,都无法接受这些情况。当然,这是一个先有鸡还是先有蛋的问题,因为人们想要使用它,但看到许多网站的拒绝,他们会回到 ASCII,这对非 ASCII 几乎没有兴趣,因此几乎没有进化。
ICANN 有一项名为“普遍接受”的倡议,它不仅涉及 IDN,甚至涉及新 gTLD,因为仍有一些地方对 TLD 进行硬编码,因此不会对几年前开放的新 TLD 做出反应, 或者像 TLD 这样愚蠢的正则表达式必须是 2 或 3 个字符长,这是错误的。
您可以在以下位置找到它:https://uasg.tech/
它作为各种公众的建议和链接,从开发人员开始,因此列出了要做/不做的事情。
他们最近发表了一篇新文章,展示了 3 年来关于基于 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 的处理。