2012-04-23 3 views
1

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

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

Спасибо,

+2

А как насчет использования [akismet] (http://akismet.com/) вместо того, чтобы опрокинуть собственное решение для защиты от спама? Я написал спам-фильтр для общих текстов один раз, и его сложно фильтровать без ложных срабатываний. Akismet готов к использованию. –

ответ

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() этот массив и получить ранжирование наиболее используемые слова в строке. Вы также должны проверить наличие паролей (например, «и», «или», «меня» и т. Д.).

+0

Хорошее решение! :) –

+0

Если есть способ выполнить функцию, если одно из этих слов используется, скажем, 10 раз, исключая общие эти слова: например, a, my, he, she, that –

+0

Вам понадобится список стоп-слова в массиве, а затем цикл через список '$ count'. Я считаю, что нет функции PHP, которая сама решает проблему с остановкой. Возможно, 'array_filter' может вам помочь. – alganet

0

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

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

Конечно, если вы хотите, чтобы проверить, является ли любое из слов в строке встречаются несколько раз ... то это становится намного менее эффективным. Вам, вероятно, придется отслеживать список «проверенных слов», и для каждого еще не проверенного слова в вашей строке проверьте, происходит ли это несколько раз.

LIKE Binarious упоминалось, CAPTCHA, будет лучше способ остановить спам ;-)

+0

Дело в том, что я не знаю, что такое повторяющаяся строка. Я думал, что для него существует функция boolean ... –

1

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

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

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

Смежные вопросы