0

我想解决电子邮件地址,我想使用 php 的explode 函数来分解它们。

可以像这样将用户与域或主机分开:

列表($user,$domain)=explode('@',$email);

但是当试图将域分解为 domain_name 和 domain_extention 时,我意识到当使用“。”分解它们时 作为参数,它并不总是 foo.bar,有时可以是 foo.ba.ar,例如 fooooo.co.uk

那么如何将“fooooo.co”与“uk”分开并让 co 与 fooooo。所以最后我会把 TLD 与其他部分分开。

我知道 co.uk 应该被视为 TLD,但它不是官方的,例如 fooooo.nat.tn 或 fooooo.gov.tn

谢谢你。

4

4 回答 4

2

只需使用strripos()查找“。”的最后一次出现:

$blah = "hello.co.uk";

$i = strripos($blah, ".");

echo "name = " . substr($blah, 0, $i) . "\n";
echo "TLD = " . substr($blah, $i + 1) . "\n";
于 2010-11-07T19:32:41.963 回答
1

更好地使用imap_rfc822_parse_adrlistmailparse_rfc822_parse_addresses解析电子邮件地址(如果有)。要从域名中删除“公共后缀”,请参阅我对删除域扩展名的回答

于 2010-11-07T19:32:02.667 回答
1

扩展奥利的答案......

substr($address, (strripos($address, '.') + 1));

将给出不带“.”的 TLD。失去+1,你也会得到点。

于 2010-11-07T20:08:48.503 回答
0

end(explode('.', $email));会给你TLD。要在没有它的情况下获得域名,您可以执行任意数量的其他字符串操作技巧,例如减去该长度。

于 2010-11-07T19:31:49.463 回答