У меня есть 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-адрес, если он еще не существует. 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-адреса являются просто строками в любом случае