我有一个数据库表列,用于存储人员网站的网址。这个专栏是独一无二的,因为我不希望人们两次使用同一个网站!
然而,一个人可以通过这样做来解决这个问题:
domain.com
domain.com/hello123
www.domain.com
所以我的计划是这样做,以便当一个人保存他们的记录时,它将删除第一个斜杠之后的所有内容,以确保只将域保存到数据库中。
虽然如何做到这一点?我之前认为这已经做了很多次,但我正在寻找一些非常简单且对使用库或其他长代码片段不感兴趣的东西。只是删除其余部分并保留域名的东西。
答案 0 :(得分:5)
// 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'];
请注意,使用所列代码,子域不是唯一的。 www.domain.com
和domain.com
将是单独的条目。
答案 1 :(得分:3)
使用parse_url:
$hostname = parse_url($userwebsite,PHP_URL_HOST);
答案 2 :(得分:2)
$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];
}
答案 3 :(得分:1)
你可以尝试
int strrpos ( string $haystack , string $needle [, int $offset = 0 ] )
然后将结果放入
string substr ( string $string , int $start [, int $length ] )
使用$needle = "/"
和$needle = "."