|
Форумы xBB > BBCode и прочие языки упрощенной разметки
Авто цензур для парсера
Автор: Nutty.
Последнее редактирование: 2011-08-05 10:53:38
Ну начнём прикручивать авто цензур.
Открываем файл parser.config.php
в нём в самый конец добавляем
$this->AutoCensor = array(
array("text" => "слово которое заменяем", "replace" => "на что заменяем")
)
Это мы добавили заготовку массив замен.
далее открываем файл bbcode.lib.php
в нём добавим после
public $mnemonics = array()
вот это
$AutoCensor пустой массив замен.
$autocensore флажок вкл.\выкл. авто цензура работает как и автоматические URL.
public $AutoCensor = array();
public $autocensore = true;
Далее в этом файле после метода
function insert_smiles($text) {
...
}
Добавим метод авто цензура
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;
}
после добавления функции надо добавить её к обработке текста парсером.
находим
function get_html($elems = null) {
в данной функции после
$elem['str'] = $this -> insert_smiles($elem['str']);
добавляем наш авто цензур
$elem['str'] = $this -> AutoCensor($elem['str']);
ну вот вроде всё авто цензур готов.
Так же авто цензур понимает регулярные выражения если воспользоваться ими можно половину матов за автоматить.
да и на по следок данный авто цензур легко прикручивается к бд если кому приспичит структура таблицы примерно будет выглядеть так.
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 комментариев
dima
Интересно  Особенно в плане хранения матов в БД.
Предполагаемое узкое место: получится слишком много запросов к базе данных. При каждой инициализации объекта - запрос. Классы тегов тоже наследуют класс bbcode, значит тоже будут запрашивать базу. Как собираетесь бороться с этим?
Nutty
Легко запрашивать из бд не в обьекте бб кодов а отдельно а бб кодам поставлять готовое.
Вариант второй кэш.
//Временной лимит кеша
$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);
}
С такова родом проблемой не так трудно разобраться если немного подумать
dima
Согласен. Просто обязан был обратить внимание читателей на этот момент
Nutty
dima, надо выложить улучшенный парсер смайлов
и ещё пару бб кодов)
dima
У Вас есть улучшенный парсер смайлов? Дополнительные бб-коды? Поделитесь, пожалуйста  Хотя бы идеями.
Nutty
dima, там в парсере смайлов использовал в заместо той функции
цикл и регулярное выражение.
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);
}
}
ну а также массив немного изменил под базу данных
$this->mnemonics = array(array(
"smile_code" => "-код смайла-",
"smile_image" => "картинка",
"smile_text" => "текст Title"
));
у мну во всяком случае быстрее работает чем тот вариант страница весом
400 кб текста в старом методе обрабатывалась 0,5 сек.
в новом 0,3 сек.
А бб коды немного позже выложу.
Там выложу заготовку HIDE, и ещё пару тегов ориентированных под форум.
dima
Спасибо за код. Реально полезно. Теги тоже интересны
Nutty
dima, Извени что проподаю просто класс пишу под CI для рабтоты с деревьями, потребовалось для моего форума.
За основу взял: http://php.russofile.ru/ru/...stedsets01/ так как нечего более вразумительного не нашел.
По теме:
Думаю не помещает раздел дополнения для xBB которые делаю пользователи и которые не входят в официальный пакет xBB.
dima
Есть идея еще лучше. Я для xBB завел проект на ГитХабе: https://github.com/xBBCoder/xBBCode Теперь любой может форкнуть его и развивать в нужном для себя направлении. А я могу сливать изменения в мастер-ветку.
Nutty
dima, Идея прекрасна но есть большое но, например я с ГитХабом, SVN и тд не работаю то есть проекты там не держу мне на пример чтобы запостить парочку BBCODE, надо создать аккаунт скачать килиет и тд.
Не думаю что это выход для тех кто не создаёт проекты на публику но часто делится своими наработками.
Просто с чего я поднял вопрос с того что по уже много чего есть для xBB но всё оно в разных местах удобней было бы всё в одном месте.
Ответить:
|