PHP bir url üzerinden alan adı şerit nasıl?

4 Cevap
parse_url($url, PHP_URL_HOST)

Yukarıdaki için çalışacak:

sub1.domain.name,

sub2.domain.name, ...

Ben sadece alan adı şerit istiyorum.

4 Cevap

Peki ne ile başlayan bir URL değil.

Kolay çözüm, bir URL gibi görünmesi için:

function get_host_from_bad_url($url)
{
 if (!$candidate_host=parse_url($url, PHP_URL_HOST)) { // deliberate assignment
     $candidate_host=parse_url('http://' . $url, PHP_URL_HOST);
 }
 return $condidate_host;
}

Orada might bir host adı içeren diğer şeyler her türlü vardır - ama çok fazla bilgi vermeden zor bu ayrıştırmak nasıl önermek.

Ancak alternatif bir yaklaşım, bir konak ismi (ve sonra potansiyel, bunun üzerine bir DNS kontrolü yapmak) olabilir gibi görünüyor şey çıkarmak için denemek olacaktır:

function strip_hosts_from_string($inp)
{
 $inp=strtolower($inp);
 $matches=preg_match_all('/([a-z0-9\-]+\.){2,}([a-z]{2,6})/',$inp);
 $hostnames=$matches[0];
 foreach ($hostnames as $x=>$host) {
       if (gethostbyname($host)==$host) {
           unset($hostnames[$x]);
       }
 }
 return $hostnames;
}

C.

Bu deneyin - bu küçük bir 'söz' ama o yorumların sağlanan bilgilerle gerekenleri yapar ve sadece etki varsa bu HTTP ve olmaksızın dahil olmak üzere tam bir URL için çalışacaktır.

$domain = 'domain1.domain2.bbc.co.uk';
$array = explode('.', $domain);
$trash = array_pop($array);
$trash = array_pop($array);

$subdomain = join('.', $array);
print $subdomain;

Birden fazla nokta varsa sadece, ilk virgülden sonra bir şey alabilir.

$url=parse_url($url, PHP_URL_HOST);
$domain=substr($url,strpos($url,'.')+1);

Bu tabii ki, biraz hacky olduğunu, ancak sizin örnekler üzerinde çalışıyor. En az iki. Ilk olup olmadığını görmek için test etmek isteyebilirsiniz. Eğer news.bbc.co.uk gibi bir url ile uğraşıyoruz eğer bbc.co.uk. için çalışmak, ama olmaz

Yollardan onlarca yapabilirsiniz. Bu gibi görünebilir:

$host = 'en.sub.domain.name';
$subdomain = implode('.', explode('.', $host, -2));

EDIT:

Bu .co.uk, .com.pl, .gov.fr SLDs ile çalışmak için gitmiyor. Bu etki alanını kaldırmak için kolay yolu $host bazı dizinin elemanı ile biter TLDs ve SLDs bir dizi, bu dizi boyunca ve eğer döngü oluşturmak gibi görünüyor son n karakterleri kesip döngü kırmak.