2010-07-17 22 views
0

我確實有域名搜索功能。在搜索框中,您可以選擇輸入任何類型的域名。我正在研究的是如何從搜索過濾子域或修剪子域並只保留主域。如何檢測子域並對其進行過濾?

例如,如果用戶輸入mail.yahoo.com,那麼要轉換爲yahoo.com或可以從搜索中省略。

+0

請參閱[我怎樣才能從一個URL的基本域名,使用PHP ?例如google.com from images.google.com](http://stackoverflow.com/questions/3211411/how-can-i-get-the-base-domain-name-from-a-url-using-php- eg-google-com-from-imag) – deceze 2010-07-17 07:04:58

+0

@deceze看到下面的一個......但是這個使用很多子句可以壓縮到幾行嗎? – mathew 2010-07-17 07:35:58

回答

-1

嗯,這並不工作,如果你忘了提到它在陣列中的所有域...

這裏是我的解決方案...但我需要將其壓縮到幾行......有沒有可能?

function subdomain($domainb){$bits = explode('/', $domainb);  
if ($bits[0]=='http:' || $bits[0]=='https:'){ 
$domainb= $bits[2]; 
} else {$domainb= $bits[0];} 
unset($bits); 
$bits = explode('.', $domainb); $idz=0; 
while (isset($bits[$idz])){$idz+=1;} 
$idz-=4; $idy=0; 
while ($idy<$idz){ unset($bits[$idy]); 
$idy+=1;} $part=array(); 
foreach ($bits AS $bit){$part[]=$bit;} 
unset($bit); unset($bits); unset($domainb); 
if (strlen($part[1])>4){ unset($part[0]);} 
foreach($part AS $bit){$domainb.=$bit.'.';} 
unset($bit); 
return preg_replace('/(.*)\./','$1',$domainb);} 
0

下面是一個更簡潔的方式來抓取域名和URL中的可能子域。

function find_subdomain($url) { 
    $parts = parse_url($url); 
    $domain_parts = explode('.', $parts['host']); 
    while(count($domain_parts) > 4) 
     array_shift($domain_parts); 
    return join('.', $domain_parts); 
} 

請記住,並非所有看起來像子域的東西都是子域。有些國家/地區有其所在國家/地區的特定域名,例如.co.uk.com.au。你不能依靠URL中的點數來告訴你什麼是和不是子域。事實上,您可能需要相反的方法 - 首先刪除top-level domain,然後看看剩下的是什麼。不幸的是,你只剩下second-level domain problem

你能告訴我們更多關於你到底想要完成什麼的嗎?你爲什麼試圖檢測子域名?你提到了一個搜索框。正在搜索什麼?


編輯:我已將該功能更新爲最多四個域的最右側部分。鑑於「http://one.two.three.four.five.six.com」它將返回'four.five.six.com'

+0

正如我前面提到的,這是一個域名搜索應用程序,如domaintools.com。所以誰在搜索框中搜索可能有機會檢查子域名。此應用程序不提供任何關於子域的信息,大多數信息都在頂層。關於國家層面是的,當然我需要那個,我的功能也能很好地工作。 在這種情況下(db.main.cdn.google.com),進入超過4個子點子域的機會非常少見。所以我的過濾器只適用於此,我可以。所以我的問題是我們如何將它壓縮到幾行? – mathew 2010-07-18 03:42:22

+0

我已更新我的代碼示例以僅返回域的最右邊四個部分。它比現有的代碼更加簡潔。 – Charles 2010-07-18 05:25:02

+0

我會給出更好的解釋:域名+ tld或域名+ sld就是這樣。在這種情況下,「six.com」 – mathew 2010-07-18 05:54:23

0

我定製了一個我正在使用的效用函數,它接近完美(但這是你可以得到沒有硬編碼所有可能的列表的域名擴展)。

下面是catch:假設主域包含至少4個字符。即爲:sub.mail.com,它返回mail.com但它爲sub.aol.com它返回sub.aol.com它返回sub.aol.com

function get_main_domain($host='') { 
    if(empty($host))$host=$_SERVER['HTTP_HOST']; 
    $domain_parts = explode('.',$host); 
    $count=count($domain_parts); 
    if($count<=2)return $host; 

    $permit=0; 
    for($i=$count-1;$i>=0;$i--){ 
     $permit++; 
     if(strlen($domain_parts[$i])>3)break; 
    } 

    while(count($domain_parts) >$permit)array_shift($domain_parts); 
    return join('.', $domain_parts); 
} 
相關問題