Автоцензор

Started by ler on 2015-01-07 12:55 — 13 replies, 2204 views

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

Сама функция

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;
}
#2
Сорри проблема не в регистре. Но все равно криво заменяет. У меня только работает со словами из трех букв
#3
главное слова из 3х букв чтобы заменяло, все остальное наживное))
#4
😀😱
Нашел косяк. Если после слова стоит запятая, то оно не заменяется.

Может кто поделится sql дампом нехороших слов?
#5
😀😱
Нашел косяк. Если после слова стоит запятая, то оно не заменяется.
пример можно?
#6
Пример. До автоцензора и после. При добавлении слова в автоцензор нужно добавить очистку кэша, а то вручную запарился чистить
#7
Со звездочками
http://s017.*******.host/i415/1501/73/f36ba46a148b.jpg
#8
ничего не понял, но проверю
#9
Красным шрифтом то что в автоцензоре. Искомое и Заменяемое слово.
В случае двух звездочек он меняет все слово, а не то что между звездочками.

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