parse_url($url, PHP_URL_HOST)
以上内容适用于:
sub1.domain.name
,
sub2.domain.name
,...
我只想删除域名。
答案 0 :(得分:1)
所以你开始的不是一个URL。
最简单的解决方案是使其看起来像一个URL:
function get_host_from_bad_url($url)
{
if (!$candidate_host=parse_url($url, PHP_URL_HOST)) { // deliberate assignment
$candidate_host=parse_url('http://' . $url, PHP_URL_HOST);
}
return $condidate_host;
}
可能包含主机名的各种其他内容 - 但没有更多信息,很难建议如何解析这些内容。
然而,另一种方法是尝试提取看起来可能是主机名的任何内容(然后可能对其进行DNS检查):
function strip_hosts_from_string($inp)
{
$inp=strtolower($inp);
$matches=preg_match_all('/([a-z0-9\-]+\.){2,}([a-z]{2,6})/',$inp);
$hostnames=$matches[0];
foreach ($hostnames as $x=>$host) {
if (gethostbyname($host)==$host) {
unset($hostnames[$x]);
}
}
return $hostnames;
}
下进行。
答案 1 :(得分:0)
您可以通过多种方式完成此操作。它看起来像这样:
$host = 'en.sub.domain.name';
$subdomain = implode('.', explode('.', $host, -2));
这不适用于.co.uk
,.com.pl
,.gov.fr
SLDs。似乎删除域的最简单方法是创建一个TLDs和SLDs的数组,循环遍历该数组,如果$host
以某个数组的元素结束,则删除最后n个字符并中断循环。
答案 2 :(得分:0)
试试这个 - 它有点'罗嗦',但它可以根据评论中提供的信息完成您所需的操作,这将适用于包括HTTP在内的完整网址,如果您只拥有该域名,则无需使用。
$domain = 'domain1.domain2.bbc.co.uk';
$array = explode('.', $domain);
$trash = array_pop($array);
$trash = array_pop($array);
$subdomain = join('.', $array);
print $subdomain;
答案 3 :(得分:0)
如果有一个以上的点,你可以在第一个点之后取任何东西。
$url=parse_url($url, PHP_URL_HOST);
$domain=substr($url,strpos($url,'.')+1);
当然,这有点令人讨厌,但它适用于您的示例。您可能希望首先测试是否至少有两个.s。如果你正在处理像news.bbc.co.uk这样的网址,它会有效,但不适用于bbc.co.uk。