使用Php从MySQL数据库获取URL可用性

时间:2014-06-03 05:24:37

标签: php mysql laravel-4

我正在尝试创建一个允许用户提交其网站网址的注册系统。现在,当用户输入URL时,它会检查数据库以查看它是否已存在,如果存在则拒绝它。

然而,我的问题是因为:

如果http://www.example.com在数据库中并且我输入http://example.com,则就检查而言,这将被视为不同的URL,并允许提交。

除了检索所有记录,删除www(如果存在),然后进行比较之外,是否有正确的方法来处理此问题? (这是一种非常低效的方式!)

注意:添加Laravel标签,以防它具有任何辅助功能(我正在使用laravel-4安装)。

编辑:这是我目前检查的逻辑:

$exists_url = DB::table("user_urls")
        ->where('site_url', 'like', $siteurl)
        ->get();
        if($exists_url)
        {
            return Redirect::to('submiturl')->withErrors('Site already exists!');
    }

编辑2:一种方法是获取给定的网址http://www.example.com,然后在数据库中搜索http://www.example.comwww.example.comhttp://example.comexample.com。但是我正试图找到一种更有效的方法来做到这一点!

2 个答案:

答案 0 :(得分:1)

我认为在您实施解决方案之前,您应该更彻底地充实您的政策。 URL的许多部分可能相同也可能不相同。您想将协议视为等效协议吗? https://foo.com vs http://foo.com。一些子域可能是别名,有些可能不是。 http://www.foo.com vs http://foo.comhttp://site1.foo.com vs http://foo.com。 URL的路径怎么样? http://foo.com vs http://foo.com/index.php。在你完全考虑好自己的政策之前,我不会浪费你的时间来编写比较函数。祝你好运!

<强>更新

或许这样的事情:

$ignore_subdomains = array('www','web','site');
$domain_parts = explode('.',$siteurl); 
$subdomain = strtolower(array_shift($domain_parts));
$siteurl = (in_array($subdomain,$ignore_subdomains)) ? implode('.',$domain_parts) : $siteurl;
//now run your DB comparison query

答案 1 :(得分:0)

您可以在使用PHP将数据发送到数据库之前进行检查。以下是一个小例子。显然你可以根据自己的喜好使它更先进。

<?php
   $test = "http://www.google.com";
   $testa = "http://google.com";
   if (str_replace("www.","",str_replace("http://","",$testa)) == str_replace("www.","",str_replace("http://","",$test))) {
     echo "same";
   }
   else {
     echo "different";
   }
?>

以下是MySQL替换示例。在此示例中,“url”是数据库字段。

SELECT * FROM `urls` WHERE REPLACE(url, "http://www","") = "google.com" OR REPLACE(url,"http://","") = "google.com"

再一次,这是非常基本的,只是为了让您更好地理解。

如果您需要任何进一步的帮助,请告诉我