Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Wykrywanie słów wulgarnych
denis94
post 15.03.2011, 21:22:59
Post #1





Grupa: Zarejestrowani
Postów: 68
Pomógł: 0
Dołączył: 8.08.2010
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
Fifi209
post 15.03.2011, 21:28:24
Post #2





Grupa: Zarejestrowani
Postów: 4 655
Pomógł: 556
Dołączył: 17.03.2009
Skąd: Katowice

Ostrzeżenie: (0%)
-----


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


--------------------
Zainteresowania: C#, PHP, JS, SQL, AJAX, XML, C dla AVR
Chętnie pomogę, lecz zanim napiszesz: Wujek Google , Manual PHP
Go to the top of the page
+Quote Post
denis94
post 15.03.2011, 21:41:45
Post #3





Grupa: Zarejestrowani
Postów: 68
Pomógł: 0
Dołączył: 8.08.2010
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


No tak ale jednak jakaś ochrona to by była
Go to the top of the page
+Quote Post
cudny
post 15.03.2011, 21:48:06
Post #4





Grupa: Zarejestrowani
Postów: 387
Pomógł: 66
Dołączył: 31.03.2005
Skąd: Kielce

Ostrzeżenie: (0%)
-----


  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']);


Ten post edytował cudny 15.03.2011, 21:50:11


--------------------
..::: Jak pomogłem to kliknij pomógł. Tak rzadko używacie tej opcji :( :::..
Go to the top of the page
+Quote Post
denis94
post 15.03.2011, 22:16:04
Post #5





Grupa: Zarejestrowani
Postów: 68
Pomógł: 0
Dołączył: 8.08.2010
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


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. }


Ten post edytował denis94 15.03.2011, 22:17:47
Go to the top of the page
+Quote Post
cudny
post 15.03.2011, 22:27:10
Post #6





Grupa: Zarejestrowani
Postów: 387
Pomógł: 66
Dołączył: 31.03.2005
Skąd: Kielce

Ostrzeżenie: (0%)
-----


  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


--------------------
..::: Jak pomogłem to kliknij pomógł. Tak rzadko używacie tej opcji :( :::..
Go to the top of the page
+Quote Post
Speedy
post 16.03.2011, 02:18:20
Post #7





Grupa: Zarejestrowani
Postów: 651
Pomógł: 28
Dołączył: 4.12.2004

Ostrzeżenie: (0%)
-----


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.

Ten post edytował Speedy 16.03.2011, 02:48:02


--------------------
Sygnatura niezgodna z regulaminem.
Go to the top of the page
+Quote Post
nospor
post 16.03.2011, 08:04:40
Post #8





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




http://forum.php.pl/index.php?showtopic=54901&hl=


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
denis94
post 16.03.2011, 16:17:18
Post #9





Grupa: Zarejestrowani
Postów: 68
Pomógł: 0
Dołączył: 8.08.2010
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
cudny
post 16.03.2011, 16:25:00
Post #10





Grupa: Zarejestrowani
Postów: 387
Pomógł: 66
Dołączył: 31.03.2005
Skąd: Kielce

Ostrzeżenie: (0%)
-----


no to dajesz zamiast zmiany preg_match z tej tablicy i tyle


--------------------
..::: Jak pomogłem to kliknij pomógł. Tak rzadko używacie tej opcji :( :::..
Go to the top of the page
+Quote Post
denis94
post 17.03.2011, 15:56:07
Post #11





Grupa: Zarejestrowani
Postów: 68
Pomógł: 0
Dołączył: 8.08.2010
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
cudny
post 17.03.2011, 16:04:16
Post #12





Grupa: Zarejestrowani
Postów: 387
Pomógł: 66
Dołączył: 31.03.2005
Skąd: Kielce

Ostrzeżenie: (0%)
-----


musisz poczytać o wyrażeniach regularnych, brakuje ci ()+ i powinno hulać


--------------------
..::: Jak pomogłem to kliknij pomógł. Tak rzadko używacie tej opcji :( :::..
Go to the top of the page
+Quote Post
denis94
post 19.03.2011, 01:48:04
Post #13





Grupa: Zarejestrowani
Postów: 68
Pomógł: 0
Dołączył: 8.08.2010
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


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ź?

Ten post edytował denis94 17.03.2011, 17:07:48
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 25.07.2025 - 09:49