PHP проверяет, есть ли повторяющаяся часть в строке

Я пытаюсь остановить спам, и во многих случаях это повторяющиеся слова, есть ли способ проверить строку, чтобы узнать, есть ли в ней повторяющаяся фраза?

$string = 'Hello ! Hello ! Hello ! Hello !";

Спасибо,

3 ответа

Решение

substr_count хорошо, когда вы знаете, что ищете. Если вы не знаете, что такое спам, вы можете использовать str_word_count а также array_count_values:

$string = 'Hello! Hello! Hello! Hello! Lorem Ipsum';
$words = str_word_count($string, 1);
$count = array_count_values($words);
print_r($count);

Это даст вам это:

Array
(
    [Hello] => 4
    [Lorem] => 1
    [Ipsum] => 1
)

Вы можете sort() этот массив и получить рейтинг наиболее часто используемых слов в строке. Вы должны также проверить наличие стоп-слов (например, "и", "или", "я" и т. Д.).

Быстрый поиск в Google дал мне это:

http://php.net/manual/en/function.substr-count.php

Однако есть лучшие идеи против спама. Как капчи. Человеческих спамеров довольно сложно поймать. Они найдут способ обойти ваш счетчик слов. Возможно, вам стоит подумать о подходе к пользовательскому спам-отчету, как это делает Youtube.

Вы можете попробовать substr_count (): http://php.net/manual/en/function.substr-count.php

$string = 'hello ! hello ! hello ! hello !';
echo substr_count($string, 'hello');

Конечно, если вы хотите проверить, встречается ли ЛЮБОЕ из слов в вашей строке несколько раз... тогда это становится намного менее эффективным. Вам, вероятно, придется отслеживать список "проверенных слов" и, для каждого еще не проверенного слова в вашей строке, проверять, встречается ли оно несколько раз.

Как упоминалось в Binarious, капча - лучший способ остановить спам;-)

Другие вопросы по тегам