Nasıl böyle bir şey?
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;
}
Klasik parse_url
kullanarak alan adı ayıklamak ve daha sonra herhangi bir alt (www bir alt varlık) olmaksızın geçerli bir etki alanı için bakacağız. 'Localhost' gibi şeyler çalışmaz. O şey eşleşmiyor false dönecektir.
// Edit:
Ile bunu deneyin:
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/>';
Ve geri dönmek gerekir:
google.com
google.co.uk
google.com
google.co.uk
nothingelsethan.com
Tabii ki, o parse_url
a> aracılığıyla almazsa şey dönmek, bu yüzden iyi oluşturulmuş bir URL olduğundan emin değildir.
// Addendum:
Alnitak hakkıdır. Yukarıda sunulan çözüm most durumlarda çalışmaz ama ille hepsi ve emin örneğin, vb. Morethan6characters ve yeni TLD onların olmadığını olmak için muhafaza edilmelidir olacaktır. Etki ayıklanması tek güvenilir yolu, http://publicsuffix.org/ olarak tutulan liste kullanmaktır. Bu ilk ama uzun vadede daha kolay ve daha sağlam daha acı. Emin misin bu proje ile uygun nasıl her yöntemin artılarını ve eksilerini anlamak ve yapmak gerekir.