Поиск определенной строки в другой строке с помощью PHP - PullRequest
2 голосов
/ 17 ноября 2010

Мне нужно найти строку для любых вхождений другой строки в PHP. У меня есть код, с которым я играл, но он, похоже, не работает.

Вот мой код:

while (list($key, $val) = each($keyword)) {
  $pos = strpos($location, $val);
  if($pos == false) {
    echo "allow";
    exit;
  } else {
    echo "deny";
    exit;
  }
}

Я попробовал некоторые из приведенных ниже вариантов, но он все еще не находит соответствия. Вот что я ищу:

Мне нужно найти: *

blah

В

http://blah.com

Кажется, ничего не найти. Код работает в обычных предложениях:

Today, the weather was very nice.

Он найдет любое слово из предложения, но, когда оно все вместе (в URL), оно не может его найти.

1 Ответ

2 голосов
/ 17 ноября 2010

При проверке логического FALSE в php вам необходимо использовать оператор ===.В противном случае, когда совпадение строки будет найдено в позиции индекса 0 строки, ваше условие if будет неправильно оценено как true.Это явно упоминается в большом красном поле в документах php для strpos().

Кроме того, на основании комментария, оставленного вами под другим ответом, кажется, что вам нужно удалитьexit оператор из блока, который разрешает доступ.

Собирая все это вместе, я думаю, ваш код должен выглядеть следующим образом:

while (list($key, $val) = each($keyword)) {
  $pos = strpos($location, $val);
  if($pos === false) { // use === instead of ==
    echo "allow";
  } else {
    echo "deny";
    exit;
  }
}

Обновление:

Сновую информацию, которую вы предоставили, я переписал логику:

function isAllowed($location) {
    $keywords = array('blah', 'another-restricted-word', 'yet-another-restricted-word');
    foreach($keywords as $keyword) {
        if (strpos($location, $keyword) !== FALSE) {
            return false;
        }
    }
    return true;
}

$location = 'http://blah.com/';
echo isAllowed($location) ? 'allow' : 'deny';
...