PHP - разрешить домены, а не субдомены - PullRequest
1 голос
/ 12 сентября 2011

Буду признателен за любую помощь, которая может быть предоставлена ​​в этом вопросе.

Я создаю регистрационную форму, одно поле предназначено для домена пользователя, который, как я проверю, действителен с FILTER_VALIDATE_URL, и что он существует с dns_check_record.

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

Кто-нибудь знает способ разрешить домены, но не субдомены?

Я протестировал следующую функцию, начиная с http://syntax.cwarn23.net/PHP/Strip_URL_to_Domain:

function domain($domainb)
{
$bits = explode('/', $domainb);
if ($bits[0]=='http:' || $bits[0]=='https:')
    {
    $domainb= $bits[2];
    } else {
    $domainb= $bits[0];
    }
unset($bits);
$bits = explode('.', $domainb);
$idz=count($bits);
$idz-=3;
if (strlen($bits[($idz+2)])==2) {
$url=$bits[$idz].'.'.$bits[($idz+1)].'.'.$bits[($idz+2)];
} else if (strlen($bits[($idz+2)])==0) {
$url=$bits[($idz)].'.'.$bits[($idz+1)];
} else {
$url=$bits[($idz+1)].'.'.$bits[($idz+2)];
}
return $url;

Однако это не идеально, поскольку любые домены, такие как www.domain.uk.com, будут отображаться как uk.com (я не знаю общего расширения домена).

Кто-нибудь знает метод лучше, чем приведенная выше функция?

Ответы [ 3 ]

0 голосов
/ 12 сентября 2011

Объедините их.

dns_check_record потерпит неудачу в «.co.uk», поэтому вы можете разбить строку на точки, проверить домен, полученный при объединении двух последних частей, и в случае неудачи использовать третьючасти, если таковые имеются.

Вы будете дважды проверять недействительные домены, но я предполагаю, что это не будет проблемой.

0 голосов
/ 12 сентября 2011

сначала вы можете использовать parse_url () , чтобы получить только имя хоста: http://www.stackoverflow.com -> $ url ['host'] = 'www.stackoverflow.com'

Во-вторых, вы можете подсчитать количество баллов в имени хоста: explode () -> count () или substr_count ()

Имеет ли хост больше 1 балла, и поддомен может бытьсуществовать.

Теперь вы можете использовать решение, упомянутое GolezTrol или arnaud576875.

0 голосов
/ 12 сентября 2011

Как указал Micheal Mior, вы должны проверить .co.uk , .com.br и многие другие.

Некоторые поставщики браузеров поддерживаютсписок таких не-TLD, которые фактически являются TLD: http://publicsuffix.org/. Список довольно большой .

Здесь есть библиотека , который использует этот эффективный список TLD для реализации функции, которую вы ищете (скачать здесь ).(Найдено через https://wiki.mozilla.org/Gecko:Effective_TLD_Service.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...