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 的长度。

有任何想法吗?

4

2 回答 2

0

除了收集和硬编码所有已知的公共二级区域(如co.uk、com.uaco.tw)并在您的代码中过滤它们之外,别无他法。请注意将两者都检测test.example.ua为有效域(这不是区域的情况)。testexample.com.uaexample.uauk

您的代码可能如下所示:

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)。据我所知,有您需要的答案(以及Mozilla 收集的特殊域集合的 url)。

于 2012-12-20T17:58:07.397 回答
0

输出正确。当输入http://test.google.co.uk值为parse_url('http://test.google.co.uk')['host']http://test.google.co.uk。当您将在数组的第一个点上展开此字符串时test,其长度为 4。

google代替您,test您需要像在第一个示例中所做的那样将子域替换为任何内容,或者使用分解字符串中的第二个元素。例如:

$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;
于 2012-12-20T17:55:45.847 回答