黑名单和preg_match

时间:2012-01-17 07:25:31

标签: php

我以为我弄明白了,但我遇到了一个问题。我正在我的应用程序中创建一个URL黑名单。我需要从一组域中阻止所有子域,目录等。下面是我的数组:

$blacklist = array(
'/\.google\./',
'/\.microsoft\./',
);   

这是我正在检查的地方:

    $host = parse_url($url, PHP_URL_HOST);
    $blackList = $GLOBALS['blacklist'];
    foreach($blackList as $stop) {
        if (preg_match($host === $stop)) {
            die('blacklisted');
            }
        }

当我运行它时,它不会按预期死亡。

3 个答案:

答案 0 :(得分:2)

你的foreach循环应该是这样的:

foreach($blacklist as $stop) {
        if (preg_match($stop, $host)) {
            die("blacklisted\n");
        }
}

你有两个问题:

  1. 数组变量的名称为blacklist,但您在blackList循环中使用了foreach
  2. preg_match使用不当,至少需要2个参数,如我的回答。

答案 1 :(得分:0)

您使用preg_match错了!

$host = parse_url($url, PHP_URL_HOST);

foreach ($blacklist as $pattern){
  $matches = array();
  preg_match($pattern, $host, $matches);
  if (count($matches)) die('blacklisted');
}

答案 2 :(得分:0)

没有foreach:

if(preg_match('/'.implode('|', array_map('preg_quote', $blacklist)).'/i', $string))
{
   die("blacklisted");
}