因为有可能在电子邮件地址的本地部分有Umlaute (例如öäü),所以我需要将它们转换为ascii,因为Zend-Mail无法处理它-它总是抛出无效的标题异常。
所以有了这个php函数idn_to_ascii,它可以将域名转换成IDNA ASCII格式。问题是我不确定如何正确使用它。
让我们使用这个电子邮件地址: testö@domain.com
// doesn't work (unknown error):
idn_to_ascii('testö@domain.com') --> xn--test@domain-ufb.com如果我只是转换电子邮件地址的本地部分,它似乎可以工作:
idn_to_ascii('testö') --> xn--test-8qa@domain.com但是如果域部分也包含Umlaute呢?
例如testö@domainö.com
我应该做这样的事情吗?
idn_to_ascii('testö').'@'.idn_to_ascii('domainö.com')同样在php主页上,有人写了一条评论,说你必须跳过高级域名部分(官方文档是错误的):see here
idn_to_ascii('domainö') // right
idn_to_ascii('domainö.com') // wrong我现在很困惑:|
有人有这方面的经验吗?最糟糕的是:我甚至不能测试它,因为我没有Umlaute的电子邮件地址。
发布于 2017-04-26 23:19:57
自2017年4月26日起,testö@domain.com无效,因为电子邮件地址的local part (testö)可以使用以下任何字符:
RFC 5322第3.2.3节
发布于 2017-12-03 17:41:03
尝试如下所示:
function emailToAscii($email) {
$explodedMail = explode('@', $email);
$mailName = idn_to_ascii(array_first($explodedMail));
$mailDomain = last($explodedMail);
$explodedDomain = explode('.', $mailDomain);
$secondLvlDomain = idn_to_ascii(array_first($explodedDomain));
$firstLvlDomain = idn_to_ascii(last($explodedDomain));
return "$mailName@$secondLvlDomain.$firstLvlDomain";
}发布于 2022-02-24 16:47:06
一些更简单的东西:
function email_to_ascii($email) {
$explode = explode('@', $email);
return $explode[0].'@'.idn_to_ascii($explode[1]);
}https://stackoverflow.com/questions/43638159
复制相似问题