2012-12-20 90 views
0

我解析域並運行成問題處理子域。如果域名是http://www.google.co.uk,我想獲得google這是6的長度。確定當前域的字符長度

我正在使用parse_url()返回主機,在這種情況下www.google.co.uk像這樣。

$url = 'http://www.google.co.uk';  
$info = parse_url($url);  
// remove www. and return google.co.uk 
$new = str_replace('www.','',$info['host']); 
$pieces = explode(".", $new); 
$len = strlen($pieces[0]); // returns character length of google = 6 
echo $len; 

域中是否包含像http://test.google.co.uk一個子我的代碼無法正常工作:它返回長度爲4;我期望它返回長度爲6.

任何想法?

+0

因此,就http://test.google.co.uk而言,您期望的長度是多少? – BryanH

+0

我只想返回域的長度而不是任何子域。如果有像test.google.co.uk這樣的子域名,那麼長度將等於4,因爲$ pieces [0]會將第一部分設置爲'測試'而不是谷歌。 –

+0

你是說在http://test.google.co.uk的情況下,你會期望長度爲6? – BryanH

回答

0

輸出正確。當輸入爲http://test.google.co.uk時,parse_url('http://test.google.co.uk')['host']的值爲http://test.google.co.uk。當你將這個exploce字符串數組點第一個元素將是test其長度爲4

爲了得到google,而不是test你需要爲你在你的第一個例子沒什麼可更換子域或採取的第二個元素在爆炸的字符串中。 E.g:

$url = 'http://test.google.co.uk';  
$info = parse_url($url);  
$pieces = explode(".", $info['host']); 
$len = strlen($pieces[1]); // returns character length of google = 6 
echo $len; 
0

沒有比收集和硬編碼所有已知的公共2-第二級區域中的其他方式(如co.u K,com.uaco.tw等),並在代碼中進行篩選。注意檢測test.example.uatest,因爲example.com.uaexample.ua都是有效域(uk區域不是這種情況)。

您的代碼可能是這樣的:

function mainDomainLength($fullDomain) { 
    //$fullDomain = 'DOMAIN.co.uk'; 
    $zones = array('uk' => array('co'), 'ua' => array('com', 'org'), ...); 
    $domainArray = explode('.', $fullDomain); 
    if (count($domain) > 2 && isset($zones[$domain[count($domain)-1]])) { 
     if (isset($zones[$domain[count($domain)-1]][$domain[count($domain)-2]])) { 
      return strlen($domain[count($domain)-3]); 
     } 
    } else if (count($domain) > 1) { 
     return strlen($domain[1]); 
    } else { 
     return strlen($domain[0]); 
    } 
} 

編輯:順便說一句!看看Get the second level domain of an URL (java)。據我所知,有你需要的答案(和收集的網址爲special domains collection是Mozilla)。