Создайте механизм в php, чтобы определить, является ли веб-сайт таким же, даже если он имеет http, https или ни того, ни другого. - PullRequest
0 голосов
/ 03 мая 2020

Я хочу создать систему в php, которая показывает, является ли сайт тем же, даже если протоколы существуют или нет:

Пример:

www.facebook.com
facebook.com
http://facebook.com
https://facebook.com
http://www.facebook.com
https://www.facebook.com

Все это один и тот же сайт, просто написанный по-разному. Основным компонентом является «facebook.com», другие - используемые протоколы.

Ответы [ 2 ]

0 голосов
/ 03 мая 2020

Это может быть хорошим решением для вашей проблемы:

function isMatches(...$urls): bool
{
    if(count($urls) <= 1) {
        return true;
    }

    $pattern = '/^(http)(s)?(:\/\/)?(www\.)?(.*)$/';
    $url = preg_replace($pattern, '$5', $urls[0]);
    for($i = 0; $i < count($urls); $i++) {
        if($url !== preg_replace($pattern, '$5', $urls[$i])) {
            return false;
        }
    }

    return true;
}

И тест:

$result = isMatches(
    'http://facebook.com',
    'http://www.facebook.com',
    'https://facebook.com',
    'https://www.facebook.com'
); // true

$result = isMatches(
    'http://facebook.com2',
    'http://www.facebook.com',
    'https://facebook.com',
    'https://www.facebook.com'
); // false
0 голосов
/ 03 мая 2020

Я бы порекомендовал вам использовать регулярные выражения . В вашем случае вам нужно регулярное выражение для определения домена второго уровня (SLD). Следующее выражение охватывает ваш случай, но вы можете расширить или уточнить список доменов верхнего уровня (TLD) (.com, .org, .net, et c), чтобы сделать его более обобщенным c:

https?:\/\/(.*\.)?(.*)(.com|.org|.net)

Это выражение вернет 3 группы:

  • Группа 1: субдомены
  • Группа 2: домен второго уровня
  • Группа 3: домен верхнего уровня

Здесь вы можете попробовать упомянутое регулярное выражение. Если вы хотите узнать больше о том, как использовать регулярные выражения в PHP, взгляните на preg_match.

...