11

既然 ICann 允许使用非拉丁字符的域名,我应该关注电子邮件验证吗?目前,我的网站正在使用 php 函数来确保电子邮件地址的每个部分中都有一些字母数字字符集。这些其他字符集(例如西里尔文、阿拉伯文和中文)能否通过验证?是否有推荐的 php 函数用于此?

4

3 回答 3

1

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

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

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

如果只想使用 PHP 内置方法,delfuego 在这个问题中提供了一个看起来很不错的正则表达式。

于 2010-05-24T20:33:10.590 回答
0

我将建议filter_var()FILTER_VALIDATE_EMAIL过滤器一起使用。但在谷歌搜索后发现它还不支持多字节字符。看起来,就目前而言,您最好的选择是去除非拉丁字符并对其执行通常的验证(尽管checkdnsrr显然会失败,因为您已经通过删除非拉丁字符来更改域并将它们替换为拉丁语等价物,因此如果您使用它来验证电子邮件域的 MX 记录,那么您将需要暂时禁用它)。

于 2010-05-24T20:14:01.150 回答
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-开源软件中的所有域名/

通过https://uasg.tech/wp-content/uploads/documents/UASG033-en-digital.pdf上的报告,了解有关 Java 和 Python 库及其对 IDN 的处理的更多详细信息。

于 2021-07-16T17:41:20.290 回答