не воспроизводится Автоцензор

L

ler

Гость
#1
Нужно сделать чтоб замена слов была регистронезависимой. Что допилить?

Сама функция

PHP:
function obtain_word_list(&$orig_word, &$replacement_word)
{
        global $bb_cfg;

        if (!$bb_cfg['use_word_censor']) return;

        if (!$sql = CACHE('bb_cache')->get('censored'))
        {
                $sql = DB()->fetch_rowset("SELECT word, replacement FROM ". BB_WORDS);
                if(!$sql) $sql = array(array('word' => 1, 'replacement' => 1));
                CACHE('bb_cache')->set('censored', $sql, 7200);
        }

        foreach($sql as $row)
        {
                //$orig_word[] = '#(?<!\S)(' . str_replace('\*', '\S*?', preg_quote($row['word'], '#')) . ')(?!\S)#iu';
                $orig_word[] = '#(?<![\p{Nd}\p{L}_])(' . str_replace('\*', '[\p{Nd}\p{L}_]*?', preg_quote($row['word'], '#')) . ')(?![\p{Nd}\p{L}_])#iu';
                $replacement_word[] = $row['replacement'];
        }

        return true;
}
 
L

ler

Гость
#2
Сорри проблема не в регистре. Но все равно криво заменяет. У меня только работает со словами из трех букв
 

PheRum

Разработчик
#3
главное слова из 3х букв чтобы заменяло, все остальное наживное))
 
L

ler

Гость
#4
:D:eek:
Нашел косяк. Если после слова стоит запятая, то оно не заменяется.

Может кто поделится sql дампом нехороших слов?
 
Последнее редактирование модератором:
L

ler

Гость
#6
Пример. До автоцензора и после. При добавлении слова в автоцензор нужно добавить очистку кэша, а то вручную запарился чистить
 
L

ler

Гость
#9
Красным шрифтом то что в автоцензоре. Искомое и Заменяемое слово.
В случае двух звездочек он меняет все слово, а не то что между звездочками.

Слово танунахер он заменит на х*р
Но правильнее было бы заменит на танунах*р ?
 

Exile

Администратор
#10
@ler а можно скриншот автоцензора в админке? Если хотите чтобы заменяло "хер" во всех вариациях, то добавьте замену слова *хер* - именно так, в звездочках. Но опять же вполне безобидные слова пострадают.
 
Сверху