Как долго TLD должен быть не менее

#php #dns #filter-var

#php #dns #фильтр-var

Вопрос:

Мой клиент жалуется, что с filter_var() помощью опции и FILTER_VALIDATE_EMAIL адреса электронной почты, например:

 john.doe@example.c
 

принимается. Итак, теперь мой вопрос: как долго должен быть TLD, по крайней мере? Я имею в виду, что мы знаем .com , .org , .us . Но TLD, как .g или .a не существуют, насколько я знаю.

Дальнейшие вопросы:

  • Могут ли они вообще существовать?
  • Они уже существуют в реальном мире (WWW)?
  • Насколько вероятно, что TLD с одним символом однажды будут существовать в WWW?

Комментарии:

1. foo@bar также является допустимым адресом! Это может не разрешиться, если я отправлю на него оттуда, где я нахожусь, но вполне может разрешиться внутри какой-нибудь интрасети.

Ответ №1:

Чтобы избежать реализации алгоритма, который может не отражать все допустимые доменные имена, вы можете использовать функцию checkdnsrr для доменного имени.

Что-то вроде:

 $parts = explode('@', $email);
$domain = $parts[1];
if (!checkdnsrr($domain)) {
    echo 'Invalid domain';
}
 

Комментарии:

1. Спасибо за ваш ответ. Я создам метод validateEmail($email, $checkDns = true) {} , чтобы я мог отключить проверку DNS, если мне когда-нибудь придется это делать.

2. Обратите внимание, что это зависит от доступности ваших DNS-преобразователей, т. Е. Это может внезапно временно отклонять электронные письма, если что-то не так с DNS-серверами или если внутренние сети слишком заняты. Тем не менее, это лучшее решение.

Ответ №2:

Я бы сделал что-то еще: проверьте, может ли домен быть разрешен и есть ли у него запись MX. Если нет, домен не может получать электронные письма, и вы можете отклонить этот адрес электронной почты.

Проверьте также getmxrr() функцию и не забывайте, что umlautdomains, также известные как домены idn или punycode, используют для этого idn_to_ascii() . Вот простой пример скрипта:

 $parts = explode('@', $email);
if(!getmxrr(idn_to_ascii($parts[1]))) {
    echo 'Reject email address';
}
 

Комментарии:

1. Это самое конкретное и самое чистое решение для всего этого. Спасибо за ваш ответ.

Ответ №3:

TLD на данный момент имеет как минимум 2 буквы.

Вы можете увидеть это в списке всех доступных TLD.

Источник: http://en.wikipedia.org/wiki/List_of_Internet_top-level_domains

Решение, предоставленное mishu, является отличным решением, поэтому вы должны его использовать!