Модераторы: Aliance, skyboy, MoLeX, ksnk

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Фильтр слов 
:(
    Опции темы
Gold Dragon
  Дата 30.1.2006, 11:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

Репутация: 1
Всего: 71



Допустим есть гостевая книга. Сообщения оставляются без предварительной модерации. Есть список слов (мат и т.п.) которые нужно находить в сообщении и заменять

Вопрос:
- как грамотнее организовать проверку и замену? И главное, какие функции быстреке будут работать?


--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
Mal Hack
Дата 30.1.2006, 13:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 16
Всего: 261



Зависит от кол-ва слов и сложности правил...
В принципе и preg-replace() - 1 раз можно прогнать.
PM ICQ   Вверх
AztEK
Дата 30.1.2006, 14:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 723
Регистрация: 4.1.2005

Репутация: нет
Всего: 18



А в идеале ещё и заменять слова, где скажем вместо русских букв используются латинские со схожим написанием.
Тут, наверное, стоит все схожие символы ложить в массив и прегать по массиву.
Правда не знаю насчёт скорости...


--------------------
Linux is like wigwam -- no windows, no gates, apache inside.
PM MAIL Jabber   Вверх
Gold Dragon
Дата 30.1.2006, 14:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

Репутация: 1
Всего: 71



Mal Hack
почитал документацию и не совсем понял как это использовать

вот например нужно в сообщении делать следующие замещения
- aaa на ббб
- 1234 на 4321
- ёй на юй

а код типа такого

Код

$a = array ("ааа","1234","ёй");
$b = array ("ббб","4321","юй");
$str = "Строка в которой нужно искать и заменять";
$itog = preg_replace ($a, $b, $str);


так чтоли?



--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
AntonioBanderaz
Дата 30.1.2006, 15:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Velichko Anton
**


Профиль
Группа: Участник
Сообщений: 851
Регистрация: 28.4.2005
Где: Санкт-Петербург

Репутация: нет
Всего: 18



Цитата(Gold Dragon @ 30.1.2006, 14:25 Найти цитируемый пост)

так чтоли?

Это вроде str_replace
В преге регульки


--------------------
ГЫ... 
PM MAIL ICQ   Вверх
BIG BROTHER
Дата 30.1.2006, 17:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 200
Регистрация: 9.12.2004
Где: Россия, Москва

Репутация: 1
Всего: 4



быстрее всего будет работать str_replace (т.е. обычная замена без регулярных выражений)
НО правильней ИМХО делать так: в базе хранить корни слов - матов и смотреть в тексте именно эти корни. При нахождении корня заменять все слово в котором этот корень есть (т.е. от пробела до пробела)

Но конечно на 100 уберечся нельзя например вот 2 слова: хорошо и xopoшo - визуально разницы вообще никакой а во втором слове буквы Х О и P- латинские икс, о и пе. да и после каждой буквы пробелов могут понаставить. В идеале конечно нужно все жестко модерировать и карать карой небесной нарушителей smile

Это сообщение отредактировал(а) BIG BROTHER - 30.1.2006, 17:20
--------------------
Mess with the best, die like the rest
PM MAIL ICQ   Вверх
AztEK
Дата 30.1.2006, 17:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 723
Регистрация: 4.1.2005

Репутация: нет
Всего: 18



BIG BROTHER корни - не дело. Будет резать безобидные слова типа "застрахуйте"


--------------------
Linux is like wigwam -- no windows, no gates, apache inside.
PM MAIL Jabber   Вверх
Mal Hack
Дата 30.1.2006, 18:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 16
Всего: 261



Gold Dragon, если так, то:
Код
<?php
// Provides: Hll Wrld f PHP
$vowels = array("a", "e", "i", "o", "u", "A", "E", "I", "O", "U");
$onlyconsonants = str_replace($vowels, "", "Hello World of PHP");

// Provides: You should eat pizza, beer, and ice cream every day
$phrase  = "You should eat fruits, vegetables, and fiber every day.";
$healthy = array("fruits", "vegetables", "fiber");
$yummy   = array("pizza", "beer", "ice cream");

$newphrase = str_replace($healthy, $yummy, $phrase);
?>

Если 5 юзаешь, то str_ireplace
PM ICQ   Вверх
Gold Dragon
Дата 31.1.2006, 11:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

Репутация: 1
Всего: 71



BIG BROTHER
наверное всё таки нужна регулярка, т.к. в базе лежат слова, а их надо проверять на наличие не алфавитного знака в начале и в конце. Например, слово "устой" не должно попасть в "плохие" слова по маске "сто", а ".сто" должно попасть. Как мне это сделать регулярными выражениями?

Всем спасибо за пояснение к str_replace. Но как мне совместить это с базой? Или проще это хранить в переменной(Array) в каком-нибудь "языковом" файле? Если в базе, то наверное нужно будет всё равно в массив перегонять?


BIG BROTHER
само сабой, нет 100% защиты и нужна модерация, но я же не могу модерить постоянно online, вот и нужна какая-то элементарная защита пока модератор кушает пончики smile
Добавлено @ 11:07

я юзаю 5-ку


--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
BIG BROTHER
Дата 31.1.2006, 22:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 200
Регистрация: 9.12.2004
Где: Россия, Москва

Репутация: 1
Всего: 4



Из базы не сложно перегнать в массив и прогнать str_replace и заменять на что-то вроде [censored] smile
--------------------
Mess with the best, die like the rest
PM MAIL ICQ   Вверх
Gold Dragon
Дата 1.2.2006, 11:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

Репутация: 1
Всего: 71



BIG BROTHER
Цитата(Gold Dragon @ 31.1.2006, 11:06 Найти цитируемый пост)

а их надо проверять на наличие не алфавитного знака в начале и в конце. Например, слово "устой" не должно попасть в "плохие" слова по маске "сто", а ".сто" должно попасть. Как мне это сделать регулярными выражениями?




--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
Mal Hack
Дата 1.2.2006, 13:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 16
Всего: 261



Gold Dragon
Код

$a = array ("ааа","1234","ёй");
$b = array ("ббб","4321","юй");
$str = "Строка в которой нужно искать и заменять";
$itog = preg_replace ("#(\s\.\-\+\=)(".implode($a,"|").")(\s\.\-\+\=)#is", "\1[censored]\3", $str);

PM ICQ   Вверх
PARROT
Дата 3.5.2006, 11:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2339
Регистрация: 5.1.2005
Где: Спб-ЦарьГрад

Репутация: нет
Всего: 50



Жизнь заставила сделать фильтр слов:
В текстовом файле записаны слова:
mate.txt
Код

агрегат
агроном
адепт
азербайджанец
азиат
активист
албанец
алигарх
алигофрен

Делаю так:
Код

$badWords = explode("\r\n", file_get_contents("mate.txt"));
$mas_com[4] = str_replace($badWords, "**грязно ругается**", $mas_com[4]);

Результат:
Код

**грязно ругается**егат  (агрегат)
**грязно ругается**ивист (активист) 

Получается, что он слово находит, но заменяет только первые три буквы.
Как исправить?  


--------------------
Безумный утешается прошедшим, слабоумный - будущим, умный - настоящим!
PM MAIL   Вверх
Serkys
Дата 3.5.2006, 14:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1061
Регистрация: 19.4.2004

Репутация: 2
Всего: 22



PARROT, а откуда у тебя берётся $mas_com? 
PM MAIL   Вверх
PARROT
Дата 3.5.2006, 14:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2339
Регистрация: 5.1.2005
Где: Спб-ЦарьГрад

Репутация: нет
Всего: 50



Из базы. В базу пишется текст сообщения, в котором могут содержаться такие слова. 
Потом при выводе нужно все это заменить. 


--------------------
Безумный утешается прошедшим, слабоумный - будущим, умный - настоящим!
PM MAIL   Вверх
Страницы: (3) Все [1] 2 3 
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Тексты | Следующая тема »


 




[ Время генерации скрипта: 0.0571 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.