如何在PHP中删除网址中的域名?

时间:2010-02-03 13:23:29

标签: php

parse_url($url, PHP_URL_HOST)

以上内容适用于:

sub1.domain.name

sub2.domain.name,...

我只想删除域名。

4 个答案:

答案 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。似乎删除域的最简单方法是创建一个TLDsSLDs的数组,循环遍历该数组,如果$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。

相关问题