确定当前域字符长度

时间:2012-12-20 17:29:02

标签: php strlen parse-url

我正在解析域并遇到处理子域的问题。如果域名为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的长度。

有什么想法吗?

2 个答案:

答案 0 :(得分:0)

输出正确。当输入为http://test.google.co.uk时,parse_url('http://test.google.co.uk')['host']的值为http://test.google.co.uk。当你在第一个点上探测这个字符串时,第一个数组元素将是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;

答案 1 :(得分:0)

没有其他方法可以收集和硬编码所有已知的公共第二级区域(例如co.u k,com.uaco.tw等)并在您的代码中过滤它们。请注意将test.example.ua检测为test,因为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)。