1

我正在尝试为进入我的网站但仍然存在 url 比较问题的 url 做简单的禁止工具系统。

我已经创建了以下数据库表badurlurl我要禁止

CREATE TABLE `badurl`(
`id` int(3) NOT NULL auto_increment,
`url` text,
PRIMARY KEY (`id`),
KEY `id` (`id`))

现在假设我已经存储了以下网址www.no_good_site.com 并且有人发布了http://www.no_good_site.com但是它是相同的但它不会禁止它。

$user = "http://www.no_good_site.com" // visitor post this

// i'm gonna do compare by the stored banned urls
// I've stored this one www.no_good_site.com

$qry="select * from badurls where url='$user'";
$result=mysql_query($qry) or die($qry);
if(mysql_num_rows($result)=='0'){

echo "Good";

}else{

while($line=mysql_fetch_array($result)){

echo "Bad";

}}

那么有什么想法我可以设置(发布和存储的url)而不用www. http://结束斜线/然后比较它。[ no_good_site.com]

因为它失败了,因为他们可能会以多种可能性进入,而我的方式需要两者完全相同。

no_good_site.com
no_good_site.com/
www.no_good_site.com/
http://no_good_site.com
http://no_good_site.com/
http://www.no_good_site.com
http://www.no_good_site.com/
4

4 回答 4

2

在比较之前使所有 URL 格式相似。

no_good_site.com => www.no_good_site.com
no_good_site.com/ = > www.no_good_site.com
www.no_good_site.com/ => www.no_good_site.com
http://no_good_site.com => www.no_good_site.com
http://no_good_site.com/ => www.no_good_site.com
http://www.no_good_site.com => www.no_good_site.com
http://www.no_good_site.com/ => www.no_good_site.com

<?php
    function formatURL($url) {

        //an array of strings I wish to remove
        $remove = array(
                        "http://",
                        "www.",
                        "index.html",
                        "index.php"
                        );

        //loop through array
        foreach($remove as $value) {
            //replace array values with nothing
            $url = str_ireplace($value, '', $url);
        }

        //if the url ends in a / then trim it off
        $url = rtrim($url,'/');

        return $url;

    }
?>
于 2012-05-22T11:06:42.407 回答
2

尝试删除 http://、www。并在查询前结束'/':

$user = "http://www.no_good_site.com/";  // visitor post this
$user = rtrim(str_ireplace(array('http://', 'www.'), '', $user), '/');
于 2012-05-22T11:09:44.730 回答
1

一件简单的事情是,如果您从输入的 URL 中提取域名,然后在数据库中搜索它,而不是完整的 URL。

您可以轻松地从变量中获取域名$_SERVER为“SERVER_NAME”。

于 2012-05-22T11:03:52.063 回答
0

也许这个?

$qry="select * from badurls where url LIKE '%$user%'";

域可以以协议作为前缀的形式出现(http,ssl)以及查询(?blah=boo)

于 2012-05-22T11:07:13.283 回答