Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Wykrywanie słów wulgarnych
Forum PHP.pl > Forum > PHP
denis94
Witam. Chcę dorobić sobie aby przed oddaniem komentarza skrypt sprawdził czy w zmiennej $_POST[tresc] jest wulgarne słowo i zwrocil 1 jezeli jest lub 0 jezeli nie ma.

Wulgaryzmy trzymam w pliku txt - każde słowo w innej lini.

  1. $file = file('wulgaryzmy.txt');


Znalazłem gotowe rozwiązania z zamienianiem wulgaryzmu na gwiazdki lecz nie oto mi chodzi.
Nie potrafię napisać takiej funkcji. Proszę o pomoc.
Fifi209
Walka z wiatrakami, równie dobrze mogę napisać:

słowo
sło.wo
sło*o

a i tak każdy wie o co chodzi
denis94
No tak ale jednak jakaś ochrona to by była
cudny
  1. function f__k($text) {
  2. if(!$text) return false;
  3. $file = file('wulgaryzmy.txt');
  4. foreach($file as $ff) {
  5. if(preg_match('/'.$ff.'/',$text)) return true;
  6. }
  7. return false;
  8. }
  9. echo f__k($_POST['tresc']);
denis94
Niestety nie działa:

  1. if(isset($_POST['test'])){
  2. function f__k($text) {
  3. if(!$text) return false;
  4. $file = file('wulgaryzmy.txt');
  5. foreach($file as $ff) {
  6. if(preg_match('/'.$ff.'/',$text)) return true;
  7. }
  8. return false;
  9. }
  10. echo f__k($_POST['tresc']);
  11.  
  12. if(f__k($_POST['tresc']) == true)
  13. {
  14. echo "true";
  15. }else{
  16. echo "false";
  17. }
  18.  
  19. }
cudny
  1. if(isset($_POST['test'])){
  2. function f__k($text) {
  3. if(!$text) return false;
  4. $file = file('wulgaryzmy.txt');
  5. foreach($file as $ff) {
  6. if(preg_match('/('.$ff.')+/',$text)) return true;
  7. }
  8. return false;
  9. }
  10. echo f__k($_POST['tresc']);
  11. }
  12.  


A to ? Nie mam teraz dostępu do apache i nie mam jak sprawdzić tongue.gif
Speedy
Cytat(fifi209 @ 15.03.2011, 21:28:24 ) *
Walka z wiatrakami, równie dobrze mogę napisać:

słowo
sło.wo
sło*o

a i tak każdy wie o co chodzi


Niekoniecznie. Akurat sposób z przechowywaniem wulgaryzmów w pliku jest bez sensu, ale można przed parsowaniem usunąć wszystkie znaki typu kropka, gwiazdka, etc. z treści i wtedy wyszukiwać wulgaryzmów.
Najlepiej załatwić sprawę wyrażeniami regularnymi, aby móc wymodelować najpopularniejsze odmiany wulgarnych słów i ich pełną deklinację. Wklepywanie tego do pliku jest bez sensu, bo nie przewidzisz wszystkich kombinacji przekleństw.

Oto przykład tej idei:
  1. <?php
  2. $subject = 'tekst z brzydkimi wyrazami na k';
  3. $subject = strtolower($subject);
  4. preg_match('/( ).*k*( )?u*( )?r[^( )]*( )?( )/', $subject, $matches);
  5. print_r($matches);
  6. ?>


Ten kod wyłapie większość wariacji słynnego polskiego wulgaryzmu na K. Należy do tego dopisać tylko filtrowanie znaków, które nie są literami (kropki, przecinki, myślniki), co już jest prostą sprawą i wymodelować w ten sposób inne popularne przekleństwa. Dzięki temu można stworzyć bardzo skuteczny wyłapywacz brzydkich słów.
denis94
Speedy - dziękuję za pomysł ale posiadam już listę słów wulgarnych z odmianami przez przypadki i w różnych formach (takie listy są gotowe do pobrania)

Nospor - właśnie z tego tematu zaczerpnąłem pomysł cenzury lecz on zamienia wulgarne słowo na inne a ja potrzebuję jedynie sprawdzenia czy tekst posiada jakieś wulgarne słowo czy nie posiada.
cudny
no to dajesz zamiast zmiany preg_match z tej tablicy i tyle
denis94
Spróbowałem z preg_match. Lecz działa mi tylko wtedy gdy ktoś próbuje dodać komentarz zawierający tylko wulgarne słowo. W przypadku gdy ktoś napisze całe zdanie z przekleństwem to słowa wulgarnego nie wykrywa.
cudny
musisz poczytać o wyrażeniach regularnych, brakuje ci ()+ i powinno hulać
denis94
Posiedziałem nad tym już trochę i skrypt działa prawie idealnie. Wykorzystałem trochę inny sposób.

Jeżeli skrypt umieszczę w takiej postaci (czyli słowa wypisane są w skrypcie) to wszystko działa idealnie - jest informacja jeżeli zmienna POST tresc zawiera wulgarne slowo:

  1. $file = file('wulgaryzmy.txt');
  2. if(isset($_POST['test'])){
  3. $wpis = $_POST['tresc'];
  4. $z = $wpis;
  5.  
  6. $string = 'dupa,debil,frajer';
  7.  
  8. $a = explode(',', $string);
  9. foreach($a as $value){
  10.  
  11. if(eregi($value, $z)) {
  12. print 'znaleziono wilgarne slowo: '. $value.' <br>';
  13. }
  14.  
  15. }
  16.  
  17. }


jezeli natomiast zamiast wypisywać wszystkie słowa w skrypcie chciałbym użyć bazy słów z pliku txt - to skrypt nie działa:

  1. $file = file('wulgaryzmy.txt');
  2. if(isset($_POST['test'])){
  3. $wpis = $_POST['tresc'];
  4. foreach($file as $value){
  5. if(eregi($value, $wpis)) {
  6. print "znaleziono wulgarne słowo: $value <br>";
  7. }
  8. }
  9. }


Dlaczego tak się dzieje? Domyślam się, że jest coś nie tak z tablicą ze słowami lecz gdy wyswietlę zmienną $file[0] lub $a[0] to prawidłowo wyświetla się pierwsze słowo z tablicy

Kombinuję cały czas i nie mogę dojść dlaczego jest taki problem z tą tablicą sad.gif Zna ktoś odpowiedź?
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.