使用url输入防止重复条目

时间:2012-08-04 08:17:32

标签: php url duplicates

我有一个输入网址的表单

动态地,用户可以输入

www.stack.com  or
www.stack.com/overflow  or
http://www.stack.com  or
http://www.stack.com/overflow

如何防止将重复条目插入我的数据库?

我试过这些

$url = (input url)

$search = str_replace("http://www.", "", $url);
$search = str_replace("http://", "", $url);
$search = str_replace("www.", "", $url);
$search = str_replace("/", "", $url);

在最后的$ search中,我想在“/”之后删除所有以下字符,包括“/” 接下来会发生什么?

3 个答案:

答案 0 :(得分:3)

您可以使用PHP的parse_url()方法为您完成所有工作:

$url = ((strpos($url, 'http://') !== 0) && (strpos($url, 'https://') !== 0)) ? 'http://'.$url : $url;
$parsed = parse_url($url);
$host = $parsed['host'];

第一行将验证给定网址中是否存在http://https://的方案。如果没有,它将预设默认值http://。如果没有给定的方案,parse_url()会将整个网址放在path索引中。有了它,它将正确地解析主机。

或者,由于您只需要域名,因此可以将PHP_URL_HOST标志添加到方法调用中:

$url = ((strpos($url, 'http://') !== 0) && (strpos($url, 'https://') !== 0)) ? 'http://'.$url : $url;
$host = parse_url($url, PHP_URL_HOST); // this will return just the host-portion.

通常,您希望保留给定网址的子域名,因为子域名可能差异很大(甚至是完全不同的网站)。但是,在www.的情况下,通常情况并非如此。鉴于以上关于如何获取当前域的声明之一,您可以使用以下命令删除www.

$host = str_replace('www.', '', $host);

答案 1 :(得分:1)

通过newfurniturey回答似乎是非常好的解决方案。在调用parse_url之前,你可以运行一次检查,如果url中缺少http://,如果是,那么你可以在http://之前添加字符串,并且parse_url应该按预期工作

答案 2 :(得分:0)

对于那些坚持使用相同问题并放在这里的人来说,这是

的完整代码
if((strpos($url, 'http://')  !== false) || (strpos($url, 'https://')  !== false)) 
{   $host = parse_url($url, PHP_URL_HOST); 
    if (strpos($url, 'www.') !== false)
        $host = str_replace('www.', '', $host);
    if (strpos($host, '/') !== false)
    {   $str = explode("/", $host);
        $host = $str[0];
    }
}

else if (strpos($url, 'www.') !== false)
{   $host = str_replace('www.', '', $url);
    if (strpos($host, '/') !== false)
    {   $str = explode("/", $host);
        $host = $str[0];
    }

}
else if (strpos($url, '/') !== false)
    {   $str = explode("/", $url);
        $host = $str[0];
    }

else $host = $url;