|
|
|
| Такой вопрос: как организовывают антиматы в чатах? Я пробывал str_replace(); но тогда мат заменяеться во всех словах.. Допустим, если бы существовал мат "да", и его заменяло на [мат], то в слове "пирамида", будет "пирами[мат]"... Помогите сделать этот антимат, пожалуйста.. Допустим, существует 3 матерных слова мат1, мат2, мат3, как сделать, что бы их заменяло на текст [вырезано]? | |
|
|
|
|
|
|
|
для: Витос
(04.06.2007 в 17:19)
| | универсальный метод
конкретно по вашему вопросу:
<?php
$mat=array('мат1','мат2','мат3');
$text=preg_replace('~\b(?:'.implode('|',$mat).')\b~i','[вырезано]',$text);
?>
|
| |
|
|
|
|
|
|
|
для: sms-send
(04.06.2007 в 17:21)
| | В вашем коде могуть быть и ошибки :) Например я могу написать слово САБЛЯ и если у вас будет в массиве один мат (какой я думаю понятно), то он закроется :) Хотя другого спомоба нету, если подумать ))) (Если только еще не написать слова исключения :) ) | |
|
|
|
|
|
|
|
для: DEM
(04.06.2007 в 18:02)
| | А вы проверьте )) | |
|
|
|
|
|
|
|
для: sms-send
(04.06.2007 в 17:21)
| | универсальный метод
Такого метода нет. | |
|
|
|
|
|
|
|
для: Unkind
(04.06.2007 в 18:15)
| | По крайней мере я ещё не нашёл ниодного матного слова, на который этот фильтр не реагирует. | |
|
|
|
|
|
|
|
для: Витос
(04.06.2007 в 17:19)
| | СМ. ниже | |
|
|
|
|
|
|
|
для: Витос
(04.06.2007 в 17:19)
| | www.softtime.ru/info/matu_net.php | |
|
|
|
|
|
|
|
для: mihdan
(04.06.2007 в 17:59)
| | sms-send, фильтр действительно реагирует.. Но в нем такая же проблема, как и у меня с str_replace();, если написать саБля, то выдаст са[вырезано]..
О чем и говори DEM .. | |
|
|
|
|
|
|
|
для: Витос
(04.06.2007 в 20:40)
| | А этот скрипт Перова, то он вообще... Даже если мат написать задом-наперед.. йух типа, то пишет что цензура.. Он вообще по ходу ищет в словах буквы и маты с них составляет :))))))))) | |
|
|
|
|
|
|
|
для: Витос
(04.06.2007 в 20:40)
| | >sms-send, фильтр действительно реагирует.. Но в нем такая же проблема, как и у меня с str_replace();, если написать саБля, то выдаст са[вырезано]..
>О чем и говори DEM ..
Ну попробуйте же:
<?php
$mat=array('то самое слово');
$text='саБля';
echo preg_replace('~\b(?:'.implode('|',$mat).')\b~i','[вырезано]',$text);
?>
|
Я не знаю как у вас, но у меня остаётся "саБля".
"\b" - позиция границы слова, поэтому это регулярное выражение просто не может среагировать на кусок слова. | |
|
|
|
|
|
|
|
для: sms-send
(04.06.2007 в 22:21)
| |
<?php
$str = "пирамида";
$str = str_replace(" да ", "[мат]", $str);
echo($str);
?>
|
| |
|
|
|
|
|
|
|
для: Unknown
(04.06.2007 в 23:32)
| | >
<?php
$str = "пирамида";
$str = str_replace(" да ", "[мат]", $str);
echo($str);
?>
|
и? Что вы хотите сказать этим? | |
|
|
|
|
|
|
|
для: sms-send
(04.06.2007 в 22:21)
| | Я в замешательстве..
Вот что написал...
$mat=array('то самое слово');
$msg=preg_replace('~\b(?:'.implode('|',$mat).')\b~i','[вырезано]',$msg);
Когда пишу е+то самое слово или какое то там вуылпывп+то самое слово, то все ок!! Нормально выводит, не заменяет..
Но стоит написать сабля, как выдает скрипт са[вырезано]. Оно то не страшно в общем, если это только одно слово. Но ведь это парадокс! Как такое возможно??? | |
|
|
|
|
|
|
|
для: Витос
(05.06.2007 в 00:25)
| | Блин, давай прямо с этими матами, а то уже запутался.. Вот еще..
Сделал так
<?php
$mat=array('бля','хуй','блядь');
$msg=preg_replace('~\b(?:'.implode('|',$mat).')\b~i','[я не нервничаю...]',$msg);
?>
|
Второй первый и третий мат заменяються, второй (хуй) - нет(((
Почему?
А еще я заметил , что когда перед матом любые 2 буквы (ровно 2 пока что заметил), то он вырезает, слова сабля, онбля, офбля, рыбля, и т.п... | |
|
|
|
|
|
|
|
для: Витос
(05.06.2007 в 00:40)
| | уууууууу...
Тут скорей всего проблема с UTF-8.
Регулярку поменяйте на
<?php
$msg=preg_replace('~\b(?:'.implode('|',$mat).')\b~iu','[я не нервничаю...]',$msg);
?>
|
| |
|
|
|
|
|
|
|
для: sms-send
(05.06.2007 в 00:45)
| |
<?php
$msg=preg_replace('~\b(?:'.implode('|',$mat).')\b~iu','[я не нервничаю...]',$msg);
?>
|
О, теперь сабля пропускает нормально, а вот со словом "хуй" проблема сохранилсаь...
<?php
$mat=array(urldecode('%E1%EB%FF'));
$text=urldecode('%F1%E0%E1%EB%FF');
echo preg_replace('~\b(?:'.implode('|',$mat).')\b~i','[вырезано]',$text);
?>
|
А это что? Где тут маты? | |
|
|
|
|
|
|
|
для: Витос
(05.06.2007 в 01:08)
| | >А это что? Где тут маты?
Вот:
<?php
echo urldecode('%E1%EB%FF');
?>
|
| |
|
|
|
|
|
|
|
для: Витос
(05.06.2007 в 00:25)
| | У меня всё в порядке. Вы точно набираете "сабля" без пробелов? Может cashe в браузере?
Пробуйте:
<?php
$mat=array(urldecode('%E1%EB%FF'));
$text=urldecode('%F1%E0%E1%EB%FF');
echo preg_replace('~\b(?:'.implode('|',$mat).')\b~i','[вырезано]',$text);
?>
|
| |
|
|
|
|
|
|
|
для: sms-send
(05.06.2007 в 00:41)
| | Ой, блин, модераторы зайдут - офигеют =) | |
|
|
|
|
|
|
|
|
для: sms-send
(05.06.2007 в 01:15)
| | та я об этом и говорю.. На счет слова "хуй" ответите? Почему ж он не фильтруеться? | |
|
|
|
|
|
|
|
для: Витос
(05.06.2007 в 01:21)
| | Не знаю, у меня в UTF-8 вообще перестал реагировать на любые слова.
Пока нашёл единственный выход:
<?php
echo iconv('WINDOWS-1251','UTF-8',preg_replace('~\b(?:'.iconv('UTF-8','WINDOWS-1251',implode('|',$mat)).')\b~i',iconv('UTF-8','WINDOWS-1251','[я не нервничаю...]'),iconv('UTF-8','WINDOWS-1251',$msg)));
?>
|
Ася из контактов - молчит. | |
|
|
|
|
|
|
|
для: sms-send
(05.06.2007 в 01:32)
| | И у меня уже тоже... Я в шоке, минуту назад работал ,уже нет...
Как с этим работать?
echo iconv('WINDOWS-1251','UTF-8',preg_replace('~\b(?:'.iconv('UTF-8','WINDOWS-1251',implode('|',$mat)).')\b~i',iconv('UTF-8','WINDOWS-1251','[я не нервничаю...]'),iconv('UTF-8','WINDOWS-1251',$msg)));
|
Я сделал
$mat=array('бля','хуй','блядь');
$msg=iconv('WINDOWS-1251','UTF-8',preg_replace('~\b(?:'.iconv('UTF-8','WINDOWS-1251',implode('|',$mat)).')\b~i',iconv('UTF-8','WINDOWS-1251','[я не нервничаю...]'),iconv('UTF-8','WINDOWS-1251',$msg)));
|
Так у меня вообще пустое окно уже.. | |
|
|
|
|
|
|
|
для: Витос
(05.06.2007 в 01:42)
| | 1. Ася есть работающая?
2. iconv установлен? (на последнем TopServer'е есть)
У меня такой результат:
[я не нервничаю...] [я не нервничаю...] [я не нервничаю...] сабля, онбля, офбля, рыбля
т.е. всё работает
Код:
<?php
$msg='некий текст с нецензурной лексикой';
$mat=array('нецензурная','лексика');
echo iconv('WINDOWS-1251','UTF-8',preg_replace('~\b(?:'.iconv('UTF-8','WINDOWS-1251',implode('|',$mat)).')\b~i',iconv('UTF-8','WINDOWS-1251','[я не нервничаю...]'),iconv('UTF-8','WINDOWS-1251',$msg)));
?>
|
| |
|
|
|
|
|
|
|
для: sms-send
(05.06.2007 в 01:47)
| | 1. Ася есть работающая?
Вы не видите моих сообщений?
Попробуйете перегрузить асю, у меня когда то был такой глюк с одним контактом..
2. iconv установлен? (на последнем TopServer'е есть)
iconv, не уверен, я хостингом пользуюсь.. Можно спросить у техподдержки, но они ответят через час.. Но я вообще то все сейчас на Денвере тестирую...А больше никаких вариантов нет? | |
|
|
|
|
|
|
|
для: Витос
(05.06.2007 в 01:54)
| | На денвере iconv нет функции ;) | |
|
|
|
|
|
|
|
для: Proger
(15.06.2007 в 14:38)
| | на денвере есть пакеты расширения со всем добром оптом. | |
|
|
|
|
|
|
|
для: Витос
(04.06.2007 в 17:19)
| | Ещё одно решение:
http://forum.dklab.ru/php/advises/CensureOpredelenieNalichiyaMataNets enzurnihSlovVTeksteMatotest.html | |
|
|
|