2010-11-17 81 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 2010-11-17 06:59:47

回答

2

在php中檢查布爾型FALSE時,您需要使用===運算符。否則,如果在字符串的索引位置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; 
    } 
} 

更新:

根據您提供新的信息,我已經重寫邏輯:

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

如何檢查它是否匹配而不是錯誤? – 2010-11-17 05:16:49