|
|
|
| Тестирую форум на движке phpbb2
Нужно сделать так, чтобы названия тем фильтровались по вхождению стоп-слов
Нашел скрипт, который получает данные с формы:
// Check subject
$stopkeys = array ('картошка','марковка','капуста','огурец'); // пытаюсь реализовать
if (!empty($subject)) && (strpos($subject, $stopkeys) !=false) // сравнение с массивом
{
$subject = htmlspecialchars(trim($subject));
}
else if ($mode == 'newtopic' || ($mode == 'editpost' && $post_data['first_post']))
{
$error_msg .= (!empty($error_msg)) ? '<br />' . $lang['Empty_subject'] : $lang['Empty_subject'];
}
|
Подскажите пожалста, как лучше сделать сравнение в данном случае? | |
|
|
|
|
|
|
|
для: julpierto
(11.07.2011 в 15:31)
| | in_array | |
|
|
|
|
|
|
|
для: Valick
(11.07.2011 в 15:34)
| | Эта функция как я понимаю, ищет вхождение слова в массив, а мне нужно, чтобы строка (название темы) проверялась на вхождение слова из массива и если результат !false тему можно публиковать | |
|
|
|
|
|
|
|
для: julpierto
(11.07.2011 в 15:43)
| | проще нанять модератора, потому как вариаций на тему высркрхудожественного мата ой как много, никто не запрещает писать слово через пробелы или еще как нибудь когда начало или конец слова определить при помощи РНР очень-очень сложно | |
|
|
|
|
|
|
|
для: Valick
(11.07.2011 в 15:51)
| | я с вами согласен, но в данном узком случае нужно реализовать именно такую проверку | |
|
|
|
|
|
|
|
для: julpierto
(11.07.2011 в 15:55)
| | я думаю тут можно с substr_count() поиграться | |
|
|
|
|
|
|
|
для: julpierto
(11.07.2011 в 15:55)
| |
foreach($stopkeys as $value){
if(substr_count($subject,$value)>0) echo "приплыли";
}
|
попробуйте так
___
только при удачном стечении обстоятельств заголовок
"Застрахуй или проиграешь" - не проканает :) | |
|
|
|
|
|
|
|
для: Valick
(11.07.2011 в 16:22)
| | Большое спасибо за помощь, Valick!! ваш вариант как раз то, что нужно)
только пока substr_count всегда выдает 0 | |
|
|
|
|
|
|
|
для: Valick
(11.07.2011 в 16:22)
| | Большое спасибо за помощь, Valick!! ваш вариант как раз то, что нужно)
только пока substr_count всегда выдает 0
$stopkeys = array ('синий','красный','зеленый','желтый','фиолетовый');
foreach($stopkeys as $value)
{
$count_keys = substr_count($subject,$value);
}
if ($count_keys !==0)
{
$subject = htmlspecialchars(trim($subject));
}
else if ($mode == 'newtopic' || ($mode == 'editpost' && $post_data['first_post']))
{
$error_msg .= (!empty($error_msg)) ? '<br />' . $lang['Empty_subject'] : $lang['Empty_subject'];
}
|
| |
|
|
|
|
|
|
|
для: julpierto
(11.07.2011 в 19:03)
| |
// Проверка предложения на недопустимые слова
$dostup=true;
$subject="Помидор всему голова!!!";
$sub=strtolower($subject);
$stopkeys=array ('картошка','марковка','капуста','огурец');
foreach($stopkeys as $value){
if(substr_count($sub,$value)>0) $dostup=false;
}
if($dostup) echo $subject;
|
| |
|
|
|
|
|
|
|
для: Valick
(11.07.2011 в 19:09)
| | Изначально было так
if (!empty($subject))
{
$subject = htmlspecialchars(trim($subject)); // по идее это значит, что $subject строковая переменная
}
|
Исправили на
$stopkeys = array ('красный','синий','желтый','зеленый');
foreach($stopkeys as $value)
{
$count_keys = substr_count($subject,$value); // и здесь должно идти сравнение
}
if ($count_keys !==0)
{
$subject = htmlspecialchars(trim($subject));
}
|
нужно чтобы стоп-слово было в заголовке, но $count_keys = 0 и пишет каждый раз "Вы должны указать заголовок сообщения, когда начинаете новую тему" даже если нужное стоп-слово вводится в форму.
PS я вас наверное совсем задолбал.) | |
|
|
|
|
|
|
|
для: julpierto
(11.07.2011 в 19:22)
| | вообще строка $subject = htmlspecialchars(trim($subject)); вызывает некоторое подозрение
htmlspecialchars - нужно использовать при выводе в браузер
а я так понимаю $subject будут запихивать в БД
$count_keys и будет ноль кроме случая когда искомое слово последнее в массиве (можете проверить)
я же дал Вам рабочий код :) | |
|
|
|
|
|
|
|
для: Valick
(11.07.2011 в 19:28)
| | Ваш код должен работать по идее, но не работает в моем случае.
Друг подсказал такое решение, через регулярные выражения, сценарий срабатывает, не пойму почему ваш вариант не хочет?
if (!empty($subject))
{ $subject = strtolower($subject);
if (preg_match('/красный|желтый|зеленый|синий/', $subject))
{
$subject = htmlspecialchars(trim($subject)); } else { die("Not Allowed"); } // может потому что не было концовки?
}
|
| |
|
|
|
|
|
|
|
для: julpierto
(11.07.2011 в 21:56)
| | может потому что мой вариант Вы так и не попробовали?)
// Check subject
$stopkeys = array ('картошка','марковка','капуста','огурец');
$dostup=true;
$sub=strtolower($subject);
foreach($stopkeys as $value){
if(substr_count($sub,$value)>0) $dostup=false;
}
if($dostup){
$subject = htmlspecialchars(trim($subject));
}else if ($mode == 'newtopic' || ($mode == 'editpost' && $post_data['first_post'])){
$error_msg .= (!empty($error_msg)) ? '<br />' . $lang['Empty_subject'] : $lang['Empty_subject'];
}
|
там где можно обходиться без регулярных выражений - нужно обходиться без регулярных выражений ;) | |
|
|
|
|
|
|
|
для: Valick
(11.07.2011 в 22:18)
| | Насчет регулярных выражений согласен - попробовал, где-то тут в коде ошибка, сценарий не запускается
foreach($stopkeys as $value){
if(substr_count($sub,$value)>0) $dostup=false; // вот этот момент меня смущает
}
|
| |
|
|
|
|
|
|
|
для: julpierto
(11.07.2011 в 22:26)
| | чем это Вас смущает? | |
|
|
|
|
|
|
|
для: Valick
(11.07.2011 в 22:35)
| | Сначала мы назначаем переменной значение $dostup=true;
,затем $dostup=false;
,а потом снова используем как true | |
|
|
|
|
|
|
|
для: julpierto
(11.07.2011 в 22:38)
| | используем только в том случае если проверка на плохие слова не даст результата
если встретим хоть одно слово из массива, то будет false и условие соответственно не выполниться
с этим все чётко :) | |
|
|
|
|
|
|
|
для: Valick
(11.07.2011 в 22:53)
| | Valick, у меня проверка не на плохие слова, а наоборот - если стоп-слово присутствует в заголовке темы, она публикуется, тем самым отсеивая не подходящие темы:)
Поймите меня пожалуйста правильно, ваш идея мне нравится и спасибо, что расширяете мой пхп кругозор, давая альтернативные варианты)
Но этот скрипт не работает и хочется понять почему?) | |
|
|
|
|
|
|
|
для: julpierto
(11.07.2011 в 23:15)
| | тогда поменяйте местами true и false
$dostup=false;
...
if(substr_count($sub,$value)>0) $dostup=true;
___
он работает, просто я сначала не понял условие задачи) | |
|
|
|
|
|
|
|
для: Valick
(11.07.2011 в 23:17)
| | Viva La Cuba!!!
Работает) спасибо Valick, что в конце концов "вдолбили" в меня cвою идею и не остановились где-нибудь на пол пути со словами "дерево понимает быстрее") | |
|
|
|