Форумы xBB

Форумы xBB > BBCode и прочие языки упрощенной разметки

Авто цензур для парсера

Автор: Nutty. Последнее редактирование: 2011-08-05 10:53:38

Ну начнём прикручивать авто цензур.
Открываем файл parser.config.php
в нём в самый конец добавляем
PHP

$this->AutoCensor = array(
  array("text"  => "слово которое заменяем",        "replace" => "на что заменяем")
)
 
Это мы добавили заготовку массив замен.
далее открываем файл bbcode.lib.php
в нём добавим после
PHP

    public $mnemonics = array()
 
вот это
$AutoCensor пустой массив замен.
$autocensore флажок вкл.\выкл. авто цензура работает как и автоматические URL.
 
PHP

    public $AutoCensor = array();
    public $autocensore = true
 
Далее в этом файле после метода
PHP

 function insert_smiles($text) {
...
 }
 
Добавим метод авто цензура
PHP

function AutoCensor($text){
                if($this->autocensore){
                        if (is_array($this->AutoCensor) && count($this->AutoCensor)){
                                foreach ($this->AutoCensor as $ACensor) {
                                        $text = preg_replace("#".preg_quote($ACensor['text'])."#iu", $ACensor['replace'], $text);
                                }
                        }
                }
               
                return $text;
        }
 
после добавления функции надо добавить её к обработке текста парсером.
находим
PHP

  function get_html($elems = null) {
 
в данной функции после
PHP

 $elem['str'] = $this -> insert_smiles($elem['str']);
 
добавляем наш авто цензур
PHP

 $elem['str'] = $this -> AutoCensor($elem['str']);
 
ну вот вроде всё авто цензур готов.
Так же авто цензур понимает регулярные выражения если воспользоваться ими можно половину матов за автоматить.
да и на по следок данный авто цензур легко прикручивается к бд если кому приспичит структура таблицы примерно будет выглядеть так.
SQL

CREATE TABLE IF NOT EXISTS `autocensor` (
  `id` mediumint(8) UNSIGNED NOT NULL AUTO_INCREMENT,
  `text` varchar(200) NOT NULL DEFAULT '',
  `replace` varchar(200) NOT NULL,
  PRIMARY KEY  (`id`),
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;
 

13 комментариев

05.08.2011 10:35:28 #
Mozilla Firefox dima
Интересно Well Особенно в плане хранения матов в БД.
 
Предполагаемое узкое место: получится слишком много запросов к базе данных. При каждой инициализации объекта - запрос. Классы тегов тоже наследуют класс bbcode, значит тоже будут запрашивать базу. Как собираетесь бороться с этим?
06.08.2011 11:23:51 #
Opera Nutty
Легко запрашивать из бд не в обьекте бб кодов а отдельно а бб кодам поставлять готовое.
 
Вариант второй кэш.
PHP

//Временной лимит кеша
$Cachetime = 600;// 10 мин
$CacheFile = "./AutoCensor.Cache";
//Проверяем наличие файла и даты его если всё ок то считываем файл в противном случае считываем из бд.
if(file_exists($CacheFile)&& (filemtime($CacheFile)+$Cachetime > time())){
    $data = file_get_contents($CacheFile);
}else{
   //Делаем запрос в бд и обновляем файл
   file_put_contents($CacheFile, $data);
}
 
С такова родом проблемой не так трудно разобраться если немного подумать
06.08.2011 12:11:40 #
Mozilla Firefox dima
Согласен. Просто обязан был обратить внимание читателей на этот момент Well
08.08.2011 03:35:09 #
Opera Nutty
dima, надо выложить улучшенный парсер смайлов
и ещё пару бб кодов)
08.08.2011 10:02:21 #
Mozilla Firefox dima
У Вас есть улучшенный парсер смайлов? Дополнительные бб-коды? Поделитесь, пожалуйста Well Хотя бы идеями.
09.08.2011 11:41:41 #
Opera Nutty
dima, там в парсере смайлов использовал в заместо той функции
цикл и регулярное выражение.
 
PHP

if(is_array($this->mnemonics) && count($this->mnemonics)) {
                                foreach ($this->mnemonics as $smile){
                                        $text = preg_replace("#".preg_quote($smile['smile_code'])."#siu", '<img src="'.$this->mnemonics_url.'/'.$smile['smile_image'].'" alt="'.$smile['smile_text'].'" title="'.$smile['smile_text'].'" style="vertical-align:middle;" />', $text);
                                }
                        }
 
ну а также массив немного изменил под базу данных
 
PHP

$this->mnemonics = array(array(
                                "smile_code" => "-код смайла-",
                                "smile_image" => "картинка",
                                "smile_text" => "текст Title"
                        ));
 

у мну во всяком случае быстрее работает чем тот вариант страница весом
400 кб текста в старом методе обрабатывалась 0,5 сек.
в новом 0,3 сек.
 
А бб коды немного позже выложу.
Там выложу заготовку HIDE, и ещё пару тегов ориентированных под форум.
09.08.2011 12:19:05 #
Mozilla Firefox dima
Спасибо за код. Реально полезно. Теги тоже интересны Well
12.10.2011 03:43:56 #
Opera Nutty
dima, Извени что проподаю просто класс пишу под CI для рабтоты с деревьями, потребовалось для моего форума.
За основу взял: http://php.russofile.ru/ru/...stedsets01/ так как нечего более вразумительного не нашел.
 
По теме:
Думаю не помещает раздел дополнения для xBB которые делаю пользователи и которые не входят в официальный пакет xBB.
12.10.2011 07:27:39 #
Mozilla Firefox dima
Есть идея еще лучше. Я для xBB завел проект на ГитХабе: https://github.com/xBBCoder/xBBCode Теперь любой может форкнуть его и развивать в нужном для себя направлении. А я могу сливать изменения в мастер-ветку.
12.10.2011 08:48:35 #
Opera Nutty
dima, Идея прекрасна но есть большое но, например я с ГитХабом, SVN и тд не работаю то есть проекты там не держу мне на пример чтобы запостить парочку BBCODE, надо создать аккаунт скачать килиет и тд.
Не думаю что это выход для тех кто не создаёт проекты на публику но часто делится своими наработками.
 
Просто с чего я поднял вопрос с того что по уже много чего есть для xBB но всё оно в разных местах удобней было бы всё в одном месте.

Ответить:

Представиться как     Антибот:
   

Просьба не постить мусор. Пользуйтесь кнопкой предварительного просмотра на панели инструментов редактора.

Введите логин: и пароль: (

© 2007-2017, Дмитрий Скоробогатов.
Разрешается воспроизводить, распространять и/или изменять материалы сайта
в соответствии с условиями GNU Free Documentation License,
версии 1.2 или любой более поздней версии, опубликованной FSF,
если только иное не указано в самих материалах.