parse_url
次のように、URL の解析に使用してルート ドメインを取得できます。
http://
まだ存在しない場合は URLに追加します
PHP_URL_HOST
定数を使用して URL のホスト名部分を取得します
explode
.
ドット ( )による URL
- を使用して、配列の最後の 2 つのチャンクを取得します
array_slice
- 結果配列を内破してルート ドメインを取得します
私が作成した小さな関数 (これは、私自身の回答hereの修正版です):
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
可能性があり、それが起こらないように追加のチェックが必要になる場合があります。
デモ!