そのようなものはどうですか?
function getDomain($url) {
$pieces = parse_url($url);
$domain = isset($pieces['host']) ? $pieces['host'] : '';
if (preg_match('/(?P<domain>[a-z0-9][a-z0-9\-]{1,63}\.[a-z\.]{2,6})$/i', $domain, $regs)) {
return $regs['domain'];
}
return false;
}
クラシックparse_url
を使用してドメイン名を抽出し、サブドメインのない有効なドメインを探します (www はサブドメインです)。「localhost」などでは機能しません。何にも一致しなかった場合は false を返します。
// 編集:
試してみてください:
echo getDomain('http://www.google.com/test.html') . '<br/>';
echo getDomain('https://news.google.co.uk/?id=12345') . '<br/>';
echo getDomain('http://my.subdomain.google.com/directory1/page.php?id=abc') . '<br/>';
echo getDomain('https://testing.multiple.subdomain.google.co.uk/') . '<br/>';
echo getDomain('http://nothingelsethan.com') . '<br/>';
そして、次のように返されます。
google.com
google.co.uk
google.com
google.co.uk
nothingelsethan.com
もちろん、 を通過できなければ何も返さないparse_url
ので、整形式の URL であることを確認してください。
// 補遺:
アルニタクは正しい。上記のソリューションはほとんどの場合に機能しますが、必ずしもすべてではなく、たとえば、.morethan6characters などを含む新しい TLD ではないことを確認するために維持する必要があります。ドメインを抽出する唯一の信頼できる方法は、http://publicsuffix.org/などの管理されたリストを使用することです。最初はより痛みを伴いますが、長期的にはより簡単で堅牢になります. 各方法の長所と短所、およびそれがプロジェクトにどのように適合するかを確実に理解する必要があります。