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でより良い解決策を提案してください。これに正規表現を使用できますか? または他のアプローチ。URLのテキストに基づいてスパムページを除外するために、膨大な数のWebページを持つWebアプリケーションにこれが必要です。

また、.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 に答える