从给定的URL获取主机名


Get Host name from given URL

如何从下面的示例中获取主机名。

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

I/p:stackoverflow.com/users/login|O/p:stackoverslow.com

I/p:/users/login|O/p:(返回空字符串)

我检查了parse_url函数,但没有返回我需要的内容。由于我是PHP的初学者,这对我来说很困难。如果你有任何想法,请回答。

这应该适用于所有类型的域名

$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将为空字符串

你可以试试这个

<?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');

你可以试试这个-

$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'))

演示

您可以使用正则表达式,如本解决方案中所述:获取URL(Regex)的部分

或者您可以使用PHP函数:http://php.net/manual/en/function.parse-url.php

我建议第二个(如果你不知道RegExes是如何工作的,它可能会很棘手)。