2011-05-18 72 views
1
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

當然,讓我們看看如何做到這一點。首先,我們需要將這些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); 

這樣做是拿你的網址,並把它們放到一個數組將它們在逗號分隔。讓我們來看看示例結果是什麼樣的:

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的網址。替代方案是使用更復雜的措施,所以這很好地工作!這裏是我們更新後的代碼:

$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); 
+0

感謝您的詳細解釋 – john 2011-05-18 02:44:00

2

像這樣:

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

,然後爲每個值:

$input[$k] = preg_replace('/^https?://(?:www\.)?/i', '', $input[$k]); 
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 */ 

?> 
+0

我怎麼在數組做到這一點? – john 2011-05-18 02:31:43

0

或者您可以使用此功能只得到域。

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

} 
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例如,這是正確的方式做到這一點,雖然。沒有規定說只有頂級域名和第一個子域名是「域名」,完整的主機名是域名。

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