2012-12-20 81 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)。