Как мне обрезать это

#php

#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? Я говорю о гораздо большем количестве веб-адресов, подобных этому, а не только о приведенном выше.

Ответ №1:

Конечно, давайте посмотрим, как это можно сделать. Во-первых, нам нужно разбить эти 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 есть хорошая функция для анализа URL-адресов, которая называется 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);
  

Ответ №2:

вот так:

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

и затем для каждого значения:

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

Ответ №3:

Ответ №4:

 <?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 */

?>
  

Ответ №5:

В качестве альтернативы вы можете использовать эту функцию, чтобы получить только домен.

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

}
  

Ответ №6:

 $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 и первый поддомен являются «доменом», полное имя хоста — это домен.

Ответ №7:

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