我正在解析域并遇到处理子域的问题。如果域名为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 :(得分: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.ua
,co.tw
等)并在您的代码中过滤它们。请注意将test.example.ua
检测为test
,因为example.com.ua
和example.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)。