我该如何修剪它

时间:2011-05-18 02:14:48

标签: php

http://www.trafficestimate.com/,http://getclicky.com/,http://technotarget.com/find-out-who-is-visiting-your-site-website-traffic-tools/,http://pmetrics.performancing.com/

以上是修剪的示例网站。我只想从上面提取域名,例如:trafficestimate.com,getclicky.com,technotarget.com,performancing.com

如何使用PHP执行此操作?我正在谈论更多这样的网址,而不仅仅是上面的网址。

7 个答案:

答案 0 :(得分:7)

当然,让我们看看如何做到这一点。首先,我们需要将这些URL分解为单个组件。我们可以使用explode命令来执行此操作:

$urls = "http://www.trafficestimate.com/,http://getclicky.com/,http://technotarget.com/find-out-who-is-visiting-your-site-website-traffic-tools/,http://pmetrics.performancing.com/";

$url_array = explode(",", $urls);

这样做就是获取您拥有的URL,并通过在逗号上分隔它们将它们放入数组中。让我们看看样本结果是什么样的:

Array
(
    [0] => http://www.trafficestimate.com/
    [1] => http://getclicky.com/
    [2] => http://technotarget.com/find-out-who-is-visiting-your-site-website-traffic-tools/
    [3] => http://pmetrics.performancing.com/
)

漂亮呃?现在,下一步是遍历所有结果,这可以通过简单的foreach循环完成。但在我们开始之前,我们需要一个地方来存储结果域。我们声明一个空数组:

$domains = array();

现在我们可以循环结果:

$domains = array();
foreach($url_array as $url) {
  // actions here
}

那么,我们需要为每个结果做些什么呢?我们需要域名。 PHP实际上有一个很好的函数来解析名为parse_url的URL。替代方案是使用更复杂的措施,所以这很好用!这是我们更新的代码:

$domains = array();
foreach($url_array as $url) {
  $parsed_url = parse_url($url);
}

现在,让我们看看parse_url给我们的是什么:

Array
(
    [scheme] => http
    [host] => pmetrics.performancing.com
    [path] => /
)

请注意主持人?这是我们试图获得的域名。所以我们将它添加到我们的域数组中:

$domains = array();
foreach($url_array as $url) {
  $parsed_url = parse_url($url);
  $domains[] = $parsed_url['host'];
}

现在让我们看看结果如何:

Array
(
    [0] => www.trafficestimate.com
    [1] => getclicky.com
    [2] => technotarget.com
    [3] => pmetrics.performancing.com
)

就是这样! $domain现在拥有所有域名。如果我们想用上面的逗号分隔打印它们,我们可以使用implode命令来执行此操作:

echo implode(',', $domains);

这给了我们:

www.trafficestimate.com,getclicky.com,technotarget.com,pmetrics.performancing.com

这就是它的全部!以下是供您参考的完整代码清单:

$urls = "http://www.trafficestimate.com/,http://getclicky.com/,http://technotarget.com/find-out-who-is-visiting-your-site-website-traffic-tools/,http://pmetrics.performancing.com/";

$url_array = explode(",", $urls);

$domains = array();
foreach($url_array as $url) {
  $parsed_url = parse_url($url);
  $domains[] = $parsed_url['host'];
}

echo implode(',', $domains);

答案 1 :(得分:2)

像这样:

$input = explode(',', $input);

然后为每个值:

$input[$k] = preg_replace('/^https?://(?:www\.)?/i', '', $input[$k]);

答案 2 :(得分:2)

答案 3 :(得分:1)

<?php
// get host name from URL
preg_match("/^(http:\/\/)?([^\/]+)/i",
    "http://www.example.com/index.html", $matches);
$host = $matches[2];

// get last two segments of host name
preg_match("/[^\.\/]+\.[^\.\/]+$/", $host, $matches);
echo "domain name is: {$matches[0]}\n";

/* Output is example.com */

?>

答案 4 :(得分:0)

或者,您可以使用此功能仅获取域名。

    function GetDomain($url)
{
$nowww = ereg_replace('www\.','',$url);
$domain = parse_url($nowww);
if(!empty($domain["host"]))
    {
     return $domain["host"];
     } else
     {
     return $domain["path"];
     }

}

答案 5 :(得分:0)

$urls = 'http://www.trafficestimate.com/,http://getclicky.com/,http://technotarget.com/find-out-who-is-visiting-your-site-website-traffic-tools/,http://pmetrics.performancing.com/';
$hosts = array_map(function ($url) { return parse_url($url, PHP_URL_HOST); }, explode(',', $urls));

var_dump($hosts);

请注意,这会返回pmetrics.performancing.com,例如,这是正确的方法。没有规则只说TLD和第一个子域是“域”,完整的主机名是域。

答案 6 :(得分:0)

<?php
$input = explode(',', $input);
$urls = array();
foreach($input as $item){
   $url = parse_url($item);
   $urls[] = $item[host];
}
?>