Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Антимат... Как?
 
 автор: Витос   (04.06.2007 в 17:19)   письмо автору
 
 

Такой вопрос: как организовывают антиматы в чатах? Я пробывал str_replace(); но тогда мат заменяеться во всех словах.. Допустим, если бы существовал мат "да", и его заменяло на [мат], то в слове "пирамида", будет "пирами[мат]"... Помогите сделать этот антимат, пожалуйста.. Допустим, существует 3 матерных слова мат1, мат2, мат3, как сделать, что бы их заменяло на текст [вырезано]?

   
 
 автор: sms-send   (04.06.2007 в 17:21)   письмо автору
 
   для: Витос   (04.06.2007 в 17:19)
 

универсальный метод

конкретно по вашему вопросу:

<?php
$mat
=array('мат1','мат2','мат3');
$text=preg_replace('~\b(?:'.implode('|',$mat).')\b~i','[вырезано]',$text);
?>

   
 
 автор: DEM   (04.06.2007 в 18:02)   письмо автору
 
   для: sms-send   (04.06.2007 в 17:21)
 

В вашем коде могуть быть и ошибки :) Например я могу написать слово САБЛЯ и если у вас будет в массиве один мат (какой я думаю понятно), то он закроется :) Хотя другого спомоба нету, если подумать ))) (Если только еще не написать слова исключения :) )

   
 
 автор: sms-send   (04.06.2007 в 18:08)   письмо автору
 
   для: DEM   (04.06.2007 в 18:02)
 

А вы проверьте ))

   
 
 автор: Unkind   (04.06.2007 в 18:15)   письмо автору
 
   для: sms-send   (04.06.2007 в 17:21)
 

универсальный метод
Такого метода нет.

   
 
 автор: sms-send   (04.06.2007 в 18:17)   письмо автору
 
   для: Unkind   (04.06.2007 в 18:15)
 

По крайней мере я ещё не нашёл ниодного матного слова, на который этот фильтр не реагирует.

   
 
 автор: mihdan   (04.06.2007 в 17:59)   письмо автору
 
   для: Витос   (04.06.2007 в 17:19)
 

СМ. ниже

   
 
 автор: mihdan   (04.06.2007 в 17:59)   письмо автору
 
   для: Витос   (04.06.2007 в 17:19)
 

www.softtime.ru/info/matu_net.php

   
 
 автор: Витос   (04.06.2007 в 20:40)   письмо автору
 
   для: mihdan   (04.06.2007 в 17:59)
 

sms-send, фильтр действительно реагирует.. Но в нем такая же проблема, как и у меня с str_replace();, если написать саБля, то выдаст са[вырезано]..
О чем и говори DEM ..

   
 
 автор: Витос   (04.06.2007 в 20:51)   письмо автору
 
   для: Витос   (04.06.2007 в 20:40)
 

А этот скрипт Перова, то он вообще... Даже если мат написать задом-наперед.. йух типа, то пишет что цензура.. Он вообще по ходу ищет в словах буквы и маты с них составляет :)))))))))

   
 
 автор: sms-send   (04.06.2007 в 22:21)   письмо автору
 
   для: Витос   (04.06.2007 в 20:40)
 

>sms-send, фильтр действительно реагирует.. Но в нем такая же проблема, как и у меня с str_replace();, если написать саБля, то выдаст са[вырезано]..
>О чем и говори DEM ..

Ну попробуйте же:
<?php
$mat
=array('то самое слово');
$text='саБля';
echo 
preg_replace('~\b(?:'.implode('|',$mat).')\b~i','[вырезано]',$text);
?>


Я не знаю как у вас, но у меня остаётся "саБля".

"\b" - позиция границы слова, поэтому это регулярное выражение просто не может среагировать на кусок слова.

   
 
 автор: Unknown   (04.06.2007 в 23:32)   письмо автору
 
   для: sms-send   (04.06.2007 в 22:21)
 

 
<?php 
$str 
"пирамида"
$str str_replace(" да ""[мат]"$str); 
echo(
$str); 
?> 

   
 
 автор: sms-send   (04.06.2007 в 23:37)   письмо автору
 
   для: Unknown   (04.06.2007 в 23:32)
 

>
 
<?php 
$str 
"пирамида"
$str str_replace(" да ""[мат]"$str); 
echo(
$str); 
?> 

и? Что вы хотите сказать этим?

   
 
 автор: Витос   (05.06.2007 в 00:25)   письмо автору
 
   для: sms-send   (04.06.2007 в 22:21)
 

Я в замешательстве..
Вот что написал...
$mat=array('то самое слово');
$msg=preg_replace('~\b(?:'.implode('|',$mat).')\b~i','[вырезано]',$msg);

Когда пишу е+то самое слово или какое то там вуылпывп+то самое слово, то все ок!! Нормально выводит, не заменяет..
Но стоит написать сабля, как выдает скрипт са[вырезано]. Оно то не страшно в общем, если это только одно слово. Но ведь это парадокс! Как такое возможно???

   
 
 автор: Витос   (05.06.2007 в 00:40)   письмо автору
 
   для: Витос   (05.06.2007 в 00:25)
 

Блин, давай прямо с этими матами, а то уже запутался.. Вот еще..
Сделал так

<?php
$mat
=array('бля','хуй','блядь');
$msg=preg_replace('~\b(?:'.implode('|',$mat).')\b~i','[я не нервничаю...]',$msg);
?>


Второй первый и третий мат заменяються, второй (хуй) - нет(((
Почему?
А еще я заметил , что когда перед матом любые 2 буквы (ровно 2 пока что заметил), то он вырезает, слова сабля, онбля, офбля, рыбля, и т.п...

   
 
 автор: sms-send   (05.06.2007 в 00:45)   письмо автору
 
   для: Витос   (05.06.2007 в 00:40)
 

уууууууу...
Тут скорей всего проблема с UTF-8.
Регулярку поменяйте на
<?php
$msg
=preg_replace('~\b(?:'.implode('|',$mat).')\b~iu','[я не нервничаю...]',$msg);
?>

   
 
 автор: Витос   (05.06.2007 в 01:08)   письмо автору
 
   для: 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); 
?>

А это что? Где тут маты?

   
 
 автор: sms-send   (05.06.2007 в 01:12)   письмо автору
 
   для: Витос   (05.06.2007 в 01:08)
 

>А это что? Где тут маты?

Вот:
<?php
echo urldecode('%E1%EB%FF');
?>

   
 
 автор: sms-send   (05.06.2007 в 00:41)   письмо автору
 
   для: Витос   (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);
?>

   
 
 автор: Витос   (05.06.2007 в 01:10)   письмо автору
 
   для: sms-send   (05.06.2007 в 00:41)
 

Ой, блин, модераторы зайдут - офигеют =)

   
 
 автор: sms-send   (05.06.2007 в 01:15)   письмо автору
 
   для: Витос   (05.06.2007 в 01:10)
 

>Ой, блин, модераторы зайдут - офигеют =)
http://www.softtime.ru/forum/editpostform.php?id_forum=1&id_theme=38612&id_post=221575
http://www.softtime.ru/forum/editpostform.php?id_forum=1&id_theme=38612&id_post=221589

   
 
 автор: Витос   (05.06.2007 в 01:21)   письмо автору
 
   для: sms-send   (05.06.2007 в 01:15)
 

та я об этом и говорю.. На счет слова "хуй" ответите? Почему ж он не фильтруеться?

   
 
 автор: sms-send   (05.06.2007 в 01:32)   письмо автору
 
   для: Витос   (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)));

?>


Ася из контактов - молчит.

   
 
 автор: Витос   (05.06.2007 в 01:42)   письмо автору
 
   для: 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)));


Так у меня вообще пустое окно уже..

   
 
 автор: sms-send   (05.06.2007 в 01:47)   письмо автору
 
   для: Витос   (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)));

?>

   
 
 автор: Витос   (05.06.2007 в 01:54)   письмо автору
 
   для: sms-send   (05.06.2007 в 01:47)
 

1. Ася есть работающая?
Вы не видите моих сообщений?
Попробуйете перегрузить асю, у меня когда то был такой глюк с одним контактом..

2. iconv установлен? (на последнем TopServer'е есть)
iconv, не уверен, я хостингом пользуюсь.. Можно спросить у техподдержки, но они ответят через час.. Но я вообще то все сейчас на Денвере тестирую...А больше никаких вариантов нет?

   
 
 автор: Proger   (15.06.2007 в 14:38)   письмо автору
 
   для: Витос   (05.06.2007 в 01:54)
 

На денвере iconv нет функции ;)

   
 
 автор: Trianon   (15.06.2007 в 14:41)   письмо автору
 
   для: Proger   (15.06.2007 в 14:38)
 

на денвере есть пакеты расширения со всем добром оптом.

   
 
 автор: Nemezis   (15.06.2007 в 16:20)   письмо автору
 
   для: Витос   (04.06.2007 в 17:19)
 

Ещё одно решение:
http://forum.dklab.ru/php/advises/CensureOpredelenieNalichiyaMataNets enzurnihSlovVTeksteMatotest.html

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования