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

Board index phpBBex 1.x Предложения и пожелания

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

Post #1by Dr.Death » 15.09.2014, 13:20

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

Code: Select all
function get_censor_preg_expression($word, $use_unicode = true)   

Code: Select all
// 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 и т.д.
Code: Select all
// 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);
Сильно не проверял, на первый взгляд работает. Может стоит как то развить эту тему и включить в стандартный движок?

Added after 29 minutes 27 seconds:
Еще позаменял
Code: Select all
(' . $word . ')
на
Code: Select all
(?:' . $word . ')
Чтобы первая * соответствовала $1, а не $2
Code: Select all
бля* -> бл.$1
*пизд* -> $1п.зд$2
Last edited by Dr.Death on 09.10.2014, 11:45, edited 1 time in total.
Моды не пишу, программированию не обучаю. Ваше незнание и нежелание знать, ваши проблемы, а не повод меня оскорблять. Минусите на здоровье, вдруг поможет.
Dr.Death M
Topic author, Гуру
Avatar
Reputation: 69
With us: 3 yaers

Post #2by Dr.Death » 17.09.2014, 08:18

Похоже это только мне надо :smile:
Моды не пишу, программированию не обучаю. Ваше незнание и нежелание знать, ваши проблемы, а не повод меня оскорблять. Минусите на здоровье, вдруг поможет.
Dr.Death M
Topic author, Гуру
Avatar
Reputation: 69
With us: 3 yaers

Post #3by Никита Однороб » 17.09.2014, 15:39

Да не, фича полезная
Никита Однороб
Новичок
Reputation: 5
With us: 3 yaers 9 months

Post #4by Boloto » 09.10.2014, 10:41

Dr.Death, спасибо, сделаю у себя
Boloto
Новичок
Reputation: 0
With us: 3 yaers 10 months


Return to Предложения и пожелания