使用PHP将url修剪为域名


Trim a url to just the domain name using PHP

我有一个数据库表列,用于存储个人网站的URL。这个专栏是独一无二的,因为我不希望人们两次使用同一个网站!

然而,一个人可以通过做以下事情来绕过这一点:

domain.com
domain.com/hello123
www.domain.com

因此,我的计划是,当一个人保存他们的记录时,它会删除第一个斜杠之后的所有内容,以确保只有域被保存到数据库中。

我该怎么做呢?我想这以前已经做过很多次了,但我正在寻找非常简单的东西,并且对使用库或其他长代码片段不感兴趣。只是去掉其余部分,只保留域名的东西。

请参阅PHP:parse_url

// Force URL to begin with "http://" or "https://" so 'parse_url' works
$url = preg_replace('/^(?!https?:'/'/)(.*:'/'/)/i', 'http://', $inputURL);
$parts = parse_url($url);
// var_dump($parts); // To see the parsed URL parts, uncomment this line
print $parts['host'];

注意,使用所列代码,子域不是唯一的。CCD_ 1和CCD_。

使用parse_url:

$hostname = parse_url($userwebsite,PHP_URL_HOST);
$sDomain = NULL;
foreach (explode('/', $sInput) as $sPart) {
  switch ($sPart) {
    case 'http:':
    case 'https:':
    case '':
      break;
    default:
      $sDomain = $sPart;
      break 2;
  }
}
if ($sDomain !== NULL) {
  echo $sDomain;
}

首先,所有斜杠都用作分隔符。接下来,将忽略所有"已知/支持"的方案,以及"http://"中出现的空部分。最后,接下来的内容都将存储在$sDomain中。

如果你不介意PCRE的依赖性,你也可以使用一个正则表达式:

if (preg_match('/^https?:'/'/([^'/]+)/', $sInput, $aisMatch) === 1) {
  echo $aisMatch[1];
}

您可以尝试

int strrpos ( string $haystack , string $needle [, int $offset = 0 ] )

然后将结果放入

string substr ( string $string , int $start [, int $length ] )

使用$needle = "/"$needle = "."