Написал небольшую функцию антимат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 (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, думай