За последние 24 часа нас посетил 21221 программист и 1636 роботов. Сейчас ищут 1435 программистов ...

Как блокировать иностранные сообщения в форуме?

Тема в разделе "Регулярные выражения", создана пользователем golduser, 22 апр 2011.

  1. golduser

    golduser Активный пользователь

    С нами с:
    22 апр 2011
    Сообщения:
    6
    Симпатии:
    0
    Здравствуйте!
    Мой форум (на основе phpbb2) задуман как русскоязычный. Как мне блокировать сообщения пользователей на английском и немецком, по сути являющиеся спамом? Думаю, что регулярные выражения помогут, но не умею пользоваться ими на таком уровне, чтобы что-то изменить в скрипте форума.
    Прошу помоши: как сделать так, чтобы скрипт форума распознавал четыре слова подряд не на русском языке и запрещал выкладывать сообщение, включающее больше четырех иностранных слов подряд? А пользователю в ответ шло бы сообщение типа "Если вы смогли зарегистрироваться на русскоязычном форуме, будьте добры выкладывать свои сообщения на русском языке". Размер в четыре слова - это для того, если кто-то в русскоязычном контенте напишет название фирмы или программы на иностранном языке.
    Спасибо.
     
  2. <?=RPG?>

    <?=RPG?> Активный пользователь

    С нами с:
    19 ноя 2010
    Сообщения:
    451
    Симпатии:
    0
    Лучше нанять злого модератора.
     
  3. golduser

    golduser Активный пользователь

    С нами с:
    22 апр 2011
    Сообщения:
    6
    Симпатии:
    0
    Злой модератор - в перспективе. Форум пока еще не раскручен до таких масштабов. Но, не будем отклоняться от темы. Прошу помочь альтруиста, кто хорошо "шарит" в конфигурации форума phpbb и, кроме того так же хорошо - в регулярных выражениях.
    Спасибо.
     
  4. <?=RPG?>

    <?=RPG?> Активный пользователь

    С нами с:
    19 ноя 2010
    Сообщения:
    451
    Симпатии:
    0
    Насчет регвыров - одними ими не обойдешься. Нужно подсчитать число латинских символов в сообщении, исключая ссылки и цитаты, и поделить на число русских символов.
    Затем сделать минимальный размер сообщения хотя бы 20-30, чтобы бот не резал сообщения вроде "golduser, +1" и иже с ними, или же поставить боту минимальное число символов в сообщнии, когда начинать работать. Короче, проблем много, и про модератора это была не шутка.
     
  5. golduser

    golduser Активный пользователь

    С нами с:
    22 апр 2011
    Сообщения:
    6
    Симпатии:
    0
    Сообщения, где подряд идут четыре и меньше иностранных слова (или знака), разделенных пробелом, бот блокировать не должен. Вот начало кода (содрал откуда-то):

    Код (Text):
    1. <?php  
    2.   $text = 'ТЕКСТ, содержащий русские и английские слова и буквы';  
    3.   // Удаляем лишние символы
    4.   $pattern = "|[^a-zа-яё@\*\)\(\?\!\-\~\]\[=\s]+|is";  
    5.   $text = preg_replace($pattern, "", $text);  
    6.   // Удаляем лишние пробелы и символы табуляции
    7.   $text = preg_replace("|[ \t]+|", " ", $text);
    8.   // Разбиваем содержимое $text - формируем массив
    9.   $arr = preg_split("|[\r\n]+|", $text);
    10.   // Выводим дамп массива
    11.   echo "<pre>";
    12.   print_r($arr);  
    13.   echo "</pre>";
    14. ?>
    Но вместо "echo" скрипт должен найти подряд пять слов или знаков, разделенных пробелом.
     
  6. golduser

    golduser Активный пользователь

    С нами с:
    22 апр 2011
    Сообщения:
    6
    Симпатии:
    0
    Можно еще проще: распознавать только первые две буквы первого слова сообщения как нерусские! Этого будет достаточно.
     
  7. Vladson

    Vladson Старожил

    С нами с:
    4 фев 2006
    Сообщения:
    4.040
    Симпатии:
    26
    Адрес:
    Estonia, Tallinn
    golduser
    А если это тэг ? (вот как в моём случае это символы "[b")

    Тупо надо поставить регулярку на проверку отсутствия русских букв.
     
  8. golduser

    golduser Активный пользователь

    С нами с:
    22 апр 2011
    Сообщения:
    6
    Симпатии:
    0
    Точно!
    А куда её впендюрить? В смысле, в какой файл форума? И потом, как достать имейл пользователя и отправить ему "багдадскую дыню в целлофане", типа "пиши по-русски"?
     
  9. Vladson

    Vladson Старожил

    С нами с:
    4 фев 2006
    Сообщения:
    4.040
    Симпатии:
    26
    Адрес:
    Estonia, Tallinn
    posting.php

    На случай
    проверять ещё и длинну.

    Т.е если сообщение больше "некоторого количества символов" и при этом нет ни одного русского символа, то значит оно не русское.
     
  10. golduser

    golduser Активный пользователь

    С нами с:
    22 апр 2011
    Сообщения:
    6
    Симпатии:
    0
    Спасибо!
    Так правильно-проверка на отсутствие русских букв? (сам составил):
    Код (Text):
    1. $str = "ТЕКСТ";
    2. if(preg_match("#([a-z]{1,}[, ]+)[a-z]{1,}#i",$str)) { echo "пиши по-русски";}
    3. else
    4. {
    5.     echo "Ваше сообщение добавлено";
    6. }