Отделение расширения от его доменного имени - PullRequest
0 голосов
/ 07 ноября 2010

Я хочу работать с адресами электронной почты, и я хочу взорвать их, используя функцию разнесения в php.

Это нормально, чтобы отделить пользователя от домена или хоста следующим образом:

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

, но, пытаясь взорвать домен до domain_name и domain_extention, я понял, что при их взятии с помощью «.»в качестве аргумента это не всегда будет foo.bar, иногда это может быть foo.ba.ar, как fooooo.co.uk

, так как отделить "fooooo.co" от "uk" и позволитьс ооооченьтак что, наконец, я отделю TLD от другой части.

Я знаю, что co.uk должен рассматриваться как TLD, но он не является официальным, как fooooo.nat.tn или fooooo.gov.tn

Спасибо.

Ответы [ 4 ]

2 голосов
/ 07 ноября 2010

Просто используйте strripos(), чтобы найти последнее вхождение ".":

$blah = "hello.co.uk";

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

echo "name = " . substr($blah, 0, $i) . "\n";
echo "TLD = " . substr($blah, $i + 1) . "\n";
1 голос
/ 07 ноября 2010

Расширяя ответ Оли ...

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

Передаст ДВУ без '.'.Потеряй +1, и ты тоже получишь точку.

1 голос
/ 07 ноября 2010

Лучше использовать imap_rfc822_parse_adrlist или mailparse_rfc822_parse_addresses для анализа адреса электронной почты, если он доступен.А для удаления «публичного суффикса» из имени домена см. мой ответ на Удалить расширение домена .

0 голосов
/ 07 ноября 2010

end(explode('.', $email)); даст вам ДВУ. Чтобы получить доменное имя без этого, вы можете выполнить любое количество других приемов манипуляции со строками, например вычесть эту длину.

...