Тюнинг автоцензора

Список разделов phpBBex 1.x (поддерживается) Пожелания 1.x

Описание: В phpBBex 1.x чего-то не хватает? Напишите об этом здесь, и мы постараемся исправиться.
Правила раздела: Одна тема — один запрос новой возможности. Обязательно формируйте внятный заголовок, максимально отражающий суть вашей идеи. Также приведите примеры, где предлагаемая вами возможность будет актуальна.
Модератор: Поддержка

Сообщение #1 Dr.Death » 15.09.2014, 13:20

Немного поковырял код автоцензора, чтобы можно было заменять слова с разными началами и окончаниями с их сохранением
Код: Выделить всё
бля* -> бл.$2
*пизд* -> $2п.зд$3

Код: Выделить всё
function get_censor_preg_expression($word, $use_unicode = true)   

Код: Выделить всё
// Replace asterisk(s) inside the pattern, at the start and at the end of it with regexes
$word = preg_replace(array('#(?<=[\p{Nd}\p{L}_])\*+(?=[\p{Nd}\p{L}_])#iu', '#^\*+#', '#\*+$#'), array('([\x20]*?|[\p{Nd}\p{L}_-]*?)', '[\p{Nd}\p{L}_-]*?', '[\p{Nd}\p{L}_-]*?'), $word);

...

// Replace the asterisk inside the pattern, at the start and at the end of it with regexes
$word = preg_replace(array('#(?<=\S)\*+(?=\S)#iu', '#^\*+#', '#\*+$#'), array('(\x20*?\S*?)', '\S*?', '\S*?'), $word);
обернул в скобки ( ) замены * чтобы попадали в $2 $3 и т.д.
Код: Выделить всё
// Replace asterisk(s) inside the pattern, at the start and at the end of it with regexes
$word = preg_replace(array('#(?<=[\p{Nd}\p{L}_])\*+(?=[\p{Nd}\p{L}_])#iu', '#^\*+#', '#\*+$#'), array('([\x20]*?|[\p{Nd}\p{L}_-]*?)', '([\p{Nd}\p{L}_-]*?)', '([\p{Nd}\p{L}_-]*?)'), $word);

...

// Replace the asterisk inside the pattern, at the start and at the end of it with regexes
$word = preg_replace(array('#(?<=\S)\*+(?=\S)#iu', '#^\*+#', '#\*+$#'), array('(\x20*?\S*?)', '(\S*?)', '(\S*?)'), $word);
Сильно не проверял, на первый взгляд работает. Может стоит как то развить эту тему и включить в стандартный движок?

Добавлено спустя 29 минут 27 секунд:
Еще позаменял
Код: Выделить всё
(' . $word . ')
на
Код: Выделить всё
(?:' . $word . ')
Чтобы первая * соответствовала $1, а не $2
Код: Выделить всё
бля* -> бл.$1
*пизд* -> $1п.зд$2
Последний раз редактировалось Dr.Death 09.10.2014, 11:45, всего редактировалось 1 раз.
Dr.Death M
Автор темы
Аватара
Репутация: 69
С нами: 10 лет 4 месяца

Сообщение #2 Dr.Death » 17.09.2014, 08:18

Похоже это только мне надо :smile:
Dr.Death M
Автор темы
Аватара
Репутация: 69
С нами: 10 лет 4 месяца

Сообщение #3 Никита Однороб » 17.09.2014, 15:39

Да не, фича полезная
Никита Однороб
Репутация: 5
С нами: 11 лет 1 месяц

Сообщение #4 Boloto » 09.10.2014, 10:41

Dr.Death, спасибо, сделаю у себя
Boloto
Репутация: 0
С нами: 11 лет 2 месяца


Вернуться в Пожелания 1.x