2010-11-17 4 views
2

Мне нужно найти строку для любых записей другой строки в PHP. У меня есть код, с которым я играл, но он, похоже, не работает.Поиск определенной строки в другой строке с помощью 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) не может найти его.

+0

Проще использовать 'strstr()', если вам действительно не нужна позиция подстроки. – mario

ответ

2

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

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

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

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

Update:

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

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'; 
+0

Как проверить, является ли это совпадением, а не false? –

Смежные вопросы