2011-05-06 70 views
0

我想这样做在PHP中发现some words包含在一个字符串如何找到一些包含在字符串中的单词?

if (strpos($str,array("select","update","insert into","delete") !== False){ 
    echo "string contain SQL statements"; 
    } 

任何人都知道如何做到这一点?

+0

请修改您的问题...哪个是'word',哪个是'string' ??? – diEcho 2011-05-06 13:11:41

+0

您发布的代码会在字符串中找到这些单词吗? – 2011-05-06 13:16:31

+0

不是真的,找到了一些案例,有些案例不是 – kn3l 2011-05-06 13:17:38

回答

2

如果你的意思是你想,如果任何一个字都包含在字符串中检测到,你可以这样做:

$sql_words = array(...); 

if(count(array_intersect(explode(' ', strtolower($str)), $sql_words)) > 0) { 

} 

虽然如果字符串包含select,这并不意味着它是一个SQL查询。但我想这取决于上下文。

根据字符串,你可能也想使用str_word_count

0

可以使用strstr功能如下:

$string_to_be_searched_in = "SELECT * FROM MyTable"; 
$sqlWords = array("insert", "update", "delete" ...); 

foreach($sqlWords as $word) { 
    if(strstr($string_to_be_searched_in, $word) != FALSE) { 
     echo "The given string is an SQL statement"; 
    } 
} 
0

尝试

$string = "i m where ?"; 
$searchfor = array("select","from","where","and","and",update,"set","insert","into","value"); 

foreach($searchfor as $v) { 
    if(false !== strpos($string, $v)) { 
    //Found a word 
    echo 'Found '.$v; 
    break; 
    } 
} 

参考:

strpos

还研究

区分大小写strstr
不区分大小写:stristr

+0

如果字符串包含“somewhere”这个词,那么该怎么办? – 2011-05-06 13:16:00

+0

而你的'if'语句实际上是不正确的。它应该是:'if(strpos($ string,$ v)> -1)'。 – 2011-05-06 13:29:19

+0

我检查过...这对我来说工作得很好。虽然它在某处失败 – diEcho 2011-05-06 13:32:59

0

您要使用的功能是preg_match()。它使用regular expressions将模式匹配到字符串,并返回模式匹配的次数 - 如果您将数组作为参数传递,还可以使用它从字符串中提取信息(在您的示例中,可以拉出该查询是)。

关于在PHP中使用正则表达式,您应该阅读these pagesthis page将允许您测试正则表达式。

相关问题