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, капча - лучший способ остановить спам;-)