Получить имя хоста по заданному URL

как получить имя хоста из приведенного ниже примера.

I / P: https://stackoverflow.com/users/login | O / P: stackoverflow.com

I / P: stackoverflow.com/users/login | O / P: stackoverflow.com

I / P: / users / login | O / P: (вернуть пустую строку)

Я проверил функцию parse_url, но не возвращает то, что мне нужно. Поскольку я новичок в PHP, мне было трудно. Если у вас есть идеи, пожалуйста, ответьте.

1

Решение

ты можешь попробовать это

<?php

function getHost($Address) {
$parseUrl = parse_url(trim($Address));
return trim(isset($parseUrl['host']) ? $parseUrl['host'] : array_shift(explode('/', $parseUrl['path'], 2)));
}

echo getHost('http://stackoverflow.com/users/login');
1

Другие решения

Вы можете попробовать это —

$url = ' https://stackoverflow.com/users/login';

function return_host($url)
{
$url = str_replace(array('http://', 'https://'), '', $url); // remove protocol if present
$temp = explode('/', $url); // explode the url by /
if(strpos($temp[0], '.com')) { // check the url part
return $temp[0];
}
else {
return false;
}
}

echo return_host($url);

Обновить

Для других типов доменов просто поменяйте чек —

if(strpos($temp[0], '.com') || strpos($temp[0], '.org') || strpos($temp[0], '.net'))

DEMO

1

Это должно работать во всех видах доменных имен

$url = " https://stackoverflow.com/users/login";
// trailing slash for edge case, it will return empty string for strstr function regardless
$test = str_replace(array("http://", "https://"), "", $url) . "/";
$domain = strstr($test, "/", true);
echo $domain; // stackoverflow.com

$domain будет пустой строкой, если домен не найден

1

Вы можете использовать регулярные выражения, как описано в этом решении: Получение частей URL (Regex)

Или вы можете использовать функцию PHP для этого: http://php.net/manual/en/function.parse-url.php

Я хотел бы предложить второй (RegExes может быть сложно, если вы не знаете точно, как они работают).

0
По вопросам рекламы [email protected]