0

我有一个输入文本

$text ="this is just a normal text with max length of 150 characters"

我有一个大小为 400 的数组

$keywordArray = array("this","that","who","where","abuse","spam","..");

现在我想查找 $text 的任何子字符串是否属于 $keywordArray

一种方法是

1) break the $text in words 
2) take each word and check in the array 
          if it contains that word
                  return true;
3) exit

请为此在php中提出任何更好的解决方案。我可以为此使用正则表达式吗?或任何其他方法。对于具有大量网页的 web 应用程序,我需要它来根据 url 的文本过滤掉垃圾邮件页面。

我们也可以使用 .htaccess 文件来处理这个问题(设置重写规则)。

Rewriterule (regex forspammedurls) spammedpage.php [L] 
Rewriterule (.*) normalpage.php [L] 

只是想了解,在 php 级别或 Apache 级别我应该处理这个问题。请提出您的建议。谢谢,

4

3 回答 3

4

这是一个简短的方法

$words = str_word_count( $text, 1 );
$foundWords = array_intersect( $words, $keywordArray);
if ( count($foundWords) ) {
    // some words found
} else {
    // no words found
}
于 2012-10-28T14:22:39.970 回答
3

使用 array_intersect 查找匹配的单词而不循环:

$text ="this is just a normal text with max length of 150 characters";
$keywordArray = array("this","that","who","where","abuse","of");

$result = array_intersect($keywordArray,str_word_count($text,2));
if (count($result) > 0) {
    echo 'Matches found: ';
    var_dump($result);
}
于 2012-10-28T14:22:55.977 回答
0

虽然您可以构造一个正则表达式,但它会很而且可能很复杂

请记住,PHP 有大量的字符串数组函数。

如果您只对某个字符串中是否存在数组键感兴趣,则使用array_filter()和之类的本机函数strpos()是一个很好的选择。

注意:我意识到这不是一个明确的答案。但是,它旨在帮助读者成为更好的 PHP 开发人员

于 2012-10-28T14:20:33.590 回答