首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用idn_to_ascii处理邮件地址

如何使用idn_to_ascii处理邮件地址
EN

Stack Overflow用户
提问于 2017-04-26 23:13:14
回答 3查看 882关注 0票数 2

因为有可能在电子邮件地址的本地部分有Umlaute (例如öäü),所以我需要将它们转换为ascii,因为Zend-Mail无法处理它-它总是抛出无效的标题异常。

所以有了这个php函数idn_to_ascii,它可以将域名转换成IDNA ASCII格式。问题是我不确定如何正确使用它。

让我们使用这个电子邮件地址: testö@domain.com

代码语言:javascript
复制
// doesn't work (unknown error):
idn_to_ascii('testö@domain.com') --> xn--test@domain-ufb.com

如果我只是转换电子邮件地址的本地部分,它似乎可以工作:

代码语言:javascript
复制
idn_to_ascii('testö') --> xn--test-8qa@domain.com

但是如果域部分也包含Umlaute呢?

例如testö@domainö.com

我应该做这样的事情吗?

代码语言:javascript
复制
idn_to_ascii('testö').'@'.idn_to_ascii('domainö.com')

同样在php主页上,有人写了一条评论,说你必须跳过高级域名部分(官方文档是错误的):see here

代码语言:javascript
复制
idn_to_ascii('domainö') // right
idn_to_ascii('domainö.com') // wrong

我现在很困惑:|

有人有这方面的经验吗?最糟糕的是:我甚至不能测试它,因为我没有Umlaute的电子邮件地址。

EN

回答 3

Stack Overflow用户

发布于 2017-04-26 23:19:57

自2017年4月26日起,testö@domain.com无效,因为电子邮件地址的local part (testö)可以使用以下任何字符:

  • 大小写英文字母(a-z,A-Z)
  • Digits 0到9个
  • 字符!#$%&‘*+-/=?^_`{|}~
  • 字符。(点、句点、句号),只要它不是第一个或最后一个字符,并且不出现两次或更多次consecutively.

RFC 5322第3.2.3节

票数 0
EN

Stack Overflow用户

发布于 2017-12-03 17:41:03

尝试如下所示:

代码语言:javascript
复制
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";
}
票数 0
EN

Stack Overflow用户

发布于 2022-02-24 16:47:06

一些更简单的东西:

代码语言:javascript
复制
function email_to_ascii($email) {
    $explode = explode('@', $email);
    return $explode[0].'@'.idn_to_ascii($explode[1]);
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43638159

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档