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

Форум PHP

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

 

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

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

тема: Защита
 
 автор: Roo$   (12.08.2006 в 18:59)   письмо автору
 
 

Как можно защитить гостевую книгу от матюковых вырожений?

   
 
 автор: kasmanaft   (12.08.2006 в 19:02)   письмо автору
 
   для: Roo$   (12.08.2006 в 18:59)
 

Составить словарь матюковых выражений и str_replace =)

   
 
 автор: Roo$   (12.08.2006 в 19:05)   письмо автору
 
   для: kasmanaft   (12.08.2006 в 19:02)
 

А как сделать проверку на наличие в ней этих вырожений?

   
 
 автор: kasmanaft   (12.08.2006 в 19:09)   письмо автору
 
   для: Roo$   (12.08.2006 в 19:05)
 

В ком "в ней" ?
Просто при добавлении сообщения обрабатываем последнего функцией anti_matyukovie_virazheniya =))))

ЗЫ: просто $сообщение = str_replace ( $массив_выражений , ' [цензуред] ' , $сообщение);

   
 
 автор: Roo$   (12.08.2006 в 21:58)   письмо автору
 
   для: kasmanaft   (12.08.2006 в 19:09)
 

Все понял. ТОгда мне прейдется еще и учитывать регистр букв? А можно что бы он не учитывался? Т.е. возьмем слово... "дурак". Его можно написать как угодно "ДУРАК", "Дурак", "дурак"..... Можно сделать чтобы это слово воспринималось как одно, без учета регистра?

   
 
 автор: kasmanaft   (13.08.2006 в 08:15)   письмо автору
 
   для: Roo$   (12.08.2006 в 21:58)
 

Если будешь заменять маты str_replace, то можно воспользоваться ф-й str_ireplace - регистро-независимый вариант первой ф-и ...

Можно через рег. выражения замениять .. eregi_replace или preg_replace c модификатором i

   
 
 автор: Roo$   (13.08.2006 в 10:35)   письмо автору
 
   для: kasmanaft   (13.08.2006 в 08:15)
 

$pattern = "Дурак";
$replacement = "Дурак";
$umsg = str_ireplace($pattern, $replacement, $umsg);

Происходит ошибка на странице. Страница добавления сообщения не отоброжается

   
 
 автор: cheops   (13.08.2006 в 11:40)   письмо автору
 
   для: Roo$   (13.08.2006 в 10:35)
 

str_ireplace() появилась только начиная с PHP 5 - у вас какая версия PHP?

   
 
 автор: Roo$   (13.08.2006 в 11:45)   письмо автору
 
   для: cheops   (13.08.2006 в 11:40)
 

php-4.3.2

   
 
 автор: cheops   (13.08.2006 в 12:13)   письмо автору
 
   для: Roo$   (13.08.2006 в 11:45)
 

Значит использовать str_ireplace не получиться, следует использовать либо str_replace, предварительно изменяя регистр, либо регулярные выражения с модификатором i.

   
 
 автор: Roo$   (13.08.2006 в 12:31)   письмо автору
 
   для: cheops   (13.08.2006 в 12:13)
 

Все получилось, у меня дома стоит php-4... , А на серваке сайта 5.....
Теперь я тоже хочу себе установить PHP-5, где его можно скатаь бесплатно?

   
 
 автор: cheops   (13.08.2006 в 16:46)   письмо автору
 
   для: Roo$   (13.08.2006 в 12:31)
 

Последнюю версию можно загрузить с зеркал ссылки на которые можно найти на php.net.

   
 
 автор: Roo$   (13.08.2006 в 12:46)   письмо автору
 
   для: kasmanaft   (13.08.2006 в 08:15)
 

а как добавлять слова в $pattern = "Дурак", ... , ...., ... ,;
через запетую? Или пробелы?

   
 
 автор: kasmanaft   (13.08.2006 в 14:43)   письмо автору
 
   для: Roo$   (13.08.2006 в 12:46)
 

не, не так ... это должен быть массив
либо

$pattern[] = "Дурак";
$pattern[] = "Дура";

Либо

$pattern = array ("Дурак", "Дура");

=)))

   
 
 автор: Roo$   (13.08.2006 в 22:34)   письмо автору
 
   для: kasmanaft   (13.08.2006 в 14:43)
 

Добустим я хочу сделать типа формы для допалнения матов в текстовый файл. Вот что у меня получилось:

<form name="name" action="mat.php" method="post">
<input name="name" type="text" value="">
<input type="submit" value="GO">
</form>

<?php
$file = fopen("mat.txt","a+");
fwrite($file,$_POST['name']."\r\n");
fclose($file);
?>

При каждом добавлении нового мата в файл, образуется пропущенные строки, т.к. "\r\n". Можно от это как нибудь избавится?

Теперь следующее... Сама форма для чтения из файла мат.вырожений...

@setlocale(LC_ALL, array ('ru_RU.CP1251', 'rus_RUS.1251'));
$replacement = "***";
$arr = file("mat.txt");
for($i=0; $i < count($arr); $i++)
{
//printf("%s<br>", $arr[$i]);
}
$pattern=$arr[$i];
$msg = str_replace($pattern, $replacement, $msg);

Тут то я и "зоблудился"... Помогите, пожалуйсто...

   
 
 автор: kasmanaft   (13.08.2006 в 22:54)   письмо автору
 
   для: Roo$   (13.08.2006 в 22:34)
 

// При каждом добавлении нового мата в файл, образуется пропущенные
// строки, т.к. "\r\n". Можно от это как нибудь избавится?
Эт я не понял )) ....

// Тут то я и "зоблудился"... Помогите, пожалуйсто...
Вот это $pattern=$arr[$i]; , наверное надо заменить на это $pattern=$arr;
(хотя тоже не понятно в чем вопрос.. :))

   
 
 автор: Roo$   (13.08.2006 в 23:03)   письмо автору
 
   для: kasmanaft   (13.08.2006 в 22:54)
 

$pattern=$arr; Я пробывал... Не работает. Не фильтрует базар

   
 
 автор: kasmanaft   (13.08.2006 в 23:09)   письмо автору
 
   для: Roo$   (13.08.2006 в 23:03)
 

Ну эт потому что опять таки маты берутся из файла и вконце стрки стоит знак переноса строки

@setlocale(LC_ALL, array ('ru_RU.CP1251', 'rus_RUS.1251'));
$replacement = "***";
$arr = file("mat.txt");
for($i=0; $i < count($arr); $i++)
{
//printf("%s<br>", $arr[$i]);
$pattern[$i] = trim($arr[$i]);
}
$msg = str_replace($pattern, $replacement, $msg);

   
 
 автор: Roo$   (13.08.2006 в 23:16)   письмо автору
 
   для: kasmanaft   (13.08.2006 в 23:09)
 

Не работает

   
 
 автор: Roo$   (14.08.2006 в 22:09)   письмо автору
 
   для: kasmanaft   (13.08.2006 в 23:09)
 

А почему мы пишим так $pattern[$i] = trim($arr[$i]);
а выводим так $msg = str_replace($pattern, $replacement, $msg);
Хотя я уже пробывал по разному, ничего не получается!

   
 
 автор: kasmanaft   (15.08.2006 в 07:18)   письмо автору
 
   для: Roo$   (14.08.2006 в 22:09)
 

Да все работает ... специально перепроверил ...
попробуй echo $msg; ......... ;))))

/// А почему мы пишим так $pattern[$i] = trim($arr[$i]);
/// а выводим так $msg = str_replace($pattern, $replacement, $msg);
Пишем так, чтобы перебрать и обработать каждое слово из массива (от 0 до count). В итоге получаем практически такой же массив, только в нем в конце слов не будет \r\n .
А в функцию уже подставляем сам массив, чтобы замена шла не конкретного слова (напр. $pattern[2] ), а всех слов что встратятся в массиве
После str_replace получаем строку, где все плохие слова будут заменены на '***'

   
 
 автор: kasmanaft   (15.08.2006 в 07:27)   письмо автору
 
   для: kasmanaft   (15.08.2006 в 07:18)
 

Сорри, перепроверил еще раз: с твоей формой действительно не работает ... я проверял только скрипт, а форму написал сам ....


<form name="name" action="" method="post">
<input name="name" type="text" value="">
<input type="submit" value="GO">
</form>

<?php
$file 
fopen("mat.txt","a+");
fwrite($file,$_POST['name']."\r\n");
fclose($file);
?>

   
 
 автор: Roo$   (15.08.2006 в 21:56)   письмо автору
 
   для: kasmanaft   (13.08.2006 в 23:09)
 

Все заработало!!! Большое спасибо!!!!!!! А как проверить, что если пользователь ввел мат через пробелы "Д У Р А К".

   
 
 автор: Киналь   (12.08.2006 в 19:05)   письмо автору
 
   для: Roo$   (12.08.2006 в 18:59)
 

Главное - не переусердствовать=) Иначе будет "Не оскор#$%йте Шума#$%а!"

   
 
 автор: cheops   (12.08.2006 в 20:34)   письмо автору
 
   для: Roo$   (12.08.2006 в 18:59)
 

Можно воспользоваться фильтром мата из раздела downloads http://www.softtime.ru/info/matu_net.php.

   
 
 автор: Roo$   (13.08.2006 в 12:35)   письмо автору
 
   для: Roo$   (12.08.2006 в 18:59)
 

С этим мы разобрались... Теперь подскажите пож. как можно защитить гост.книгу от смайликов.
Например в каждое сообщение можно вставлять, пусть, макисмум 5 смайликов. Если больше, то они откидываются...

   
 
 автор: WinT   (13.08.2006 в 15:01)
 
   для: Roo$   (13.08.2006 в 12:35)
 

Вот:

http://softtime.ru/forum/read.php?id_forum=1&id_theme=21696&page=1

   
 
 автор: WinT   (13.08.2006 в 15:01)
 
   для: Roo$   (13.08.2006 в 12:35)
 

Вот:

http://softtime.ru/forum/read.php?id_forum=1&id_theme=21696&page=1

   
 
 автор: cheops   (13.08.2006 в 16:47)   письмо автору
 
   для: Roo$   (13.08.2006 в 12:35)
 

Под новые вопросы, лучше заводить новые темы.

   
Rambler's Top100
вверх

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