我有一个数据库表列,用于存储个人网站的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 = "."