Làm thế nào về điều gì đó như vậy?
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;
}
sẽ trích xuất các tên miền bằng cách sử dụng cổ điển parse_url
và sau đó tìm kiếm một tên miền hợp lệ mà không cần bất kỳ tên miền phụ (www là tên miền phụ). Sẽ không làm việc trên những thứ như 'localhost'. Sẽ trả về false nếu nó không khớp với bất kỳ thứ gì.
// Edit:
Hãy thử nó với:
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/>';
Và nó sẽ trả về:
google.com
google.co.uk
google.com
google.co.uk
nothingelsethan.com
Tất nhiên, nó sẽ không trở lại bất cứ điều gì nếu nó doesn Không vượt qua được parse_url
, vì vậy hãy đảm bảo đó là URL được tạo đúng.
// Phụ Lục:
Alnitak là đúng.Giải pháp được trình bày ở trên sẽ hoạt động trong hầu hết các trường hợp nhưng không nhất thiết phải tất cả và cần được duy trì để đảm bảo, ví dụ: TLD mới của chúng không có .morethan6characters.vv. Cách đáng tin cậy duy nhất để giải nén miền là sử dụng danh sách được duy trì như http://publicsuffix.org/. Ban đầu nó đau đớn hơn nhưng dễ dàng hơn và mạnh mẽ hơn về lâu dài. Bạn cần phải chắc chắn rằng bạn hiểu được ưu và nhược điểm của từng phương pháp và cách nó phù hợp với dự án của bạn.
Bạn đã đánh giá trước rằng tôi không chắc chắn sẽ giữ đủ tốt, đó là bạn có thể biết phần nào của máy chủ là tên miền mà bạn quan tâm thực sự là TLD? –
Ví dụ, chỉ cần về bất kỳ tên miền dyndns dường như bị chặn nếu bạn chỉ nhìn vào tên miền chuẩn. Để ngăn chặn thư rác từ tên miền của www.mysite.isa-geek.org, hoặc chỉ mysite.isa-geek.org bạn sẽ quan tâm nếu bạn đã chặn tất cả isa-geek.org? –
Có, tôi sẽ bị chặn là isa-geek.org trong trường hợp này. Tôi quan tâm nhất đến foo. [Hậu tố] trong đó [hậu tố] là tld hoặc combo của hậu tố chuẩn. tld (co.uk) –