Intereting Posts
Как сохранить значения из цикла foreach в массив? Как эхо и печать отличаются в PHP? API PayPal Rest: как отключить регистрацию / оплату с помощью диалогового окна кредитных карт при экспресс-выписке Как пройти SimpleXML для редактирования текстовых узлов? Автоматически загружать файл config.php для всех страниц перед чем-либо еще Проверка php, если метод переопределен в дочернем классе ImageMagick работает в командной строке, но когда exec () в php возвращает 5 с «несовместимой версией библиотеки», Проблема веб-службы вывода php-json с символами utf-8 (греческая) substr_count не работает с новыми строками? установить PHP cookie на клик Разбирайте все ссылки, которые содержат определенное слово в теге «href» Практическое руководство. Оптимизация производительности форм Symfony? Как включить CSS в php? $ _POST с переменным количеством входов? Ошибка Curl Не удалось разрешить хост: saved_report.xml; Нет данных о запрошенном типе "

Как проверить определенную часть URL-адреса, используя php

У меня есть URL-адрес переменной.

<?php $a='www.example.com'; ?> 

У меня есть другая переменная, которая имеет это значение

 <?php $b='example.com'; ?> 

Каким образом я могу проверить, что $ b и $ a одинаковы. Я имею в виду, даже если URL в $ b подобен

 'example.com/test','example.com/test.html','www.example.com/example.html' 

Мне нужно проверить, что $ b в этом случае равно $ a. Если это похоже на example.net/example.org при изменении имени домена, оно должно возвращать значение false. Я проверил с strpos и strcmp . Но я не нашел, что это правильный способ проверить в случае urls. Какую функцию я могу использовать, чтобы проверить, что $ b в этом случае похож на $ a?

Вы можете использовать parse_url для разбора URL-адреса и получения корневого домена, например:

  • Добавьте http:// в URL-адрес, если он еще не существует.
  • Получить часть имени хоста URL-адреса с PHP_URL_HOST константы PHP_URL_HOST
  • explode URL-адрес точкой ( . )
  • Получите последние два куска массива, используя array_slice
  • Исследуйте массив результатов, чтобы получить корневой домен

Небольшая функция, которую я сделал (это модифицированная версия моего собственного ответа здесь ):

 function getRootDomain($url) { if (!preg_match("~^(?:f|ht)tps?://~i", $url)) { $url = "http://" . $url; } $domain = implode('.', array_slice(explode('.', parse_url($url, PHP_URL_HOST)), -2)); return $domain; } 

Тестовые случаи:

 $a = 'http://example.com'; $urls = array( 'example.com/test', 'example.com/test.html', 'www.example.com/example.html', 'example.net/foobar', 'example.org/bar' ); foreach ($urls as $url) { if(getRootDomain($url) == getRootDomain($a)) { echo "Root domain is the same\n"; } else { echo "Not same\n"; } } 

Вывод:

 Root domain is the same Root domain is the same Root domain is the same Not same Not same 

Примечание. Это решение не является надежным и может не работать для URL-адресов, таких как example.co.uk и вам может потребоваться дополнительные проверки, чтобы убедиться, что этого не происходит.

Демо!

Вы можете использовать parse_url для тяжелого подъема, а затем разделить имя хоста на точку, проверяя, совпадают ли последние два элемента:

 $url1 = parse_url($url1); $url2 = parse_url($url2); $host_parts1 = explode(".", $url1["host"]); $host_parts2 = explode(".", $url2["host"]); if ($host_parts1[count($host_parts1)-1] == $host_parts2[count($host_parts2)-1] && ($host_parts1[count($host_parts1)-2] == $host_parts2[count($host_parts2)-2]) { echo "match"; } else { echo "no match"; } 

Я думаю, что этот ответ может помочь: Поиск частичных строк PHP

Поскольку эти URL-адреса являются просто строками в любом случае