mb_strtolower нужна помощь

943
.
hooligan
Написал небольшую функцию антиматa...
function antimat($msg){
$file=file("../incfiles/antimat.dat");
$i=0; 
while($i < count($file)){
$msg = str_replace(rtrim($file[$i]),'[<span style="color:gray">
<b>мат</b></span>]',$msg);
$i++;
} 
return $msg;
}

где в файле antimat.dat матерные слова каждое с новой строчки...
Всё работает прекрасно... Но возникла одна проблема...
Если в слова написанны в верхнем и нижнем регистре (Вот ТаК) то функция не работает...
Если добавить:
$msg=mb_strtolower($msg);
то на выходе всё будет с маленькой буквы...
Как можно сделать так что бы функция работала и регистр сохранялся на выходе?
.
¤
ниасилил... зачем ты тогда хочешь ее использовать?
.
Блиносвёрт ?
hooligan, используй вспомогательные переменные, в них храни оригиналы, которые выводи, на основе проверки примененных к ним функций!
.
В место str_replace юзай регулярку preg_replace с индификатором i
.
для особо мерзких, мы особо дерзкие
hooligan (18.07.2011/22:14)
Как можно сделать так что бы функция работала и регистр сохранялся на выходе?
function antimat($msg){
    $file = file("../incfiles/antimat.dat");
    $i=0; 
    while ($i < count($file)) {
        $msg = preg_replace('|' . rtrim($file[$i]) . '|iu', '[<span style="color:gray"><b>мат</b></span>]', $msg);
        $i++;
    } 
    return $msg;
}
.
FlySelf
аkа ПьяНый Ангел
слишком много регулярок, с масивми ведь тоже можно работать
.
для особо мерзких, мы особо дерзкие
FlySelf (19.07.2011/05:36)
слишком много регулярок, с масивми ведь тоже можно работать
function antimat($str) {
    $array = array('/плохое слово/iu', '/еще одно плохое слово/iu', '/и еще одно О_о/iu');
    $str = preg_replace($array, '[<span style="color:gray"><b>мат</b></span>]', $str);
    return $str;
}

поленился сразу написать)))
P.S. автор, я надеюсь функция будет использоваться при записи в БД, а не на выводе?
.
функция будет работать на выходе... Зачем писать в базу... A как же существующие записи? Хочу на форуме применить...
.
Atmas (19.07.2011/05:25)
[php]function antimat($msg){
$file = file("../incfiles/antimat.dat");
$i=0;
while ($i < count($file)) {
$msg = preg_replace('|' . rtrim($file[$i]) . '|iu', '[<span style="colo
вот это работает как надо... спасиб...
Зы. A массив это не то кино... Тонна слов в одной функции... A так и работает быстро и вроде как не грузит
.
для особо мерзких, мы особо дерзкие
hooligan (19.07.2011/09:40)
функция будет работать на выходе... Зачем писать в базу... A как же существующие записи? Хочу на форуме применить...
ОМГ) Ее нужна использовать когда пишешь, чтоб заменило и в базу уже с заменой записывало.
вот это работает как надо... спасиб...
Зы. A массив это не то кино... Тонна слов в одной функции... A так и работает быстро и вроде как не грузит
лучше написав в массив слова, нагрузка меньше будет чем регулярка в цикле) в принципе если тебя устраивает - пользуйся...
Но насчет использования ее на выводе я категорически против, так как к примеру 10 сообщений, + цикл, регулярок будет 400 при 40 словах.
А если с массивом - то 10...
А если еще и при написании то вообще одна.
Даже если с циклом то 40 будет при написании, при 40 словах.
40 против 400, думай
Всего: 66