Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

2 Stron V   1 2 >  
Reply to this topicStart new topic
> [PHP]Cenzor, implementacja
majestiq
post 12.08.2008, 09:21:40
Post #1





Grupa: Zarejestrowani
Postów: 235
Pomógł: 0
Dołączył: 26.10.2006

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


Mam taki prosty skrypt wyświetlający pozdrowienia na stronie:

  1. <?php
  2. (...)
  3. // odczyt pliku do tablicy
  4. $tekst = file("pozdrowienia.txt"); // odczytuje dane z pliku, nadac chmod 777
  5. $ile = 15; // ile linijek ma zapisywac do pliku (zero liczy sie tez jako linijka)
  6.  
  7. // zapisanie nowej linijki i starej zawartosci
  8. $plik = fopen("pozdrowienia.txt", "w");
  9. flock($plik, 2);
  10. fwrite($plik, "$_POST[pozd] r\n");
  11. for($i=0; $i < $ile; $i++) fwrite($plik, $tekst[$i]);
  12. flock($plik, 3);
  13. fclose($plik);
  14. setcookie ("sent", "sent", time()+60); //ustawia ciasto mowiace o tym, ze już wyslal pozdrowienia. 1=1 sekunda
  15. }
  16. else {
  17. $komunikat = 'Pozdrowienie musi mieć 5 - 40 znaków';
  18. } }
  19.  
  20. $tekst = file("pozdrowienia.txt"); // odczytuje dane z pliku, nadac chmod 777
  21. // zmienna $tekst[] to pozdrowienie, $gwiazdka to przerywnik miedzy pozdrowieniami
  22. $gwiazdka = '<span style="margin: 0 20px;">*</span>';
  23. $pozdrowienia = $gwiazdka . $tekst[0] . $gwiazdka . $tekst[1] . $gwiazdka . $tekst[2] . $gwiazdka . $tekst[3] . $gwiazdka . $tekst[4] . $gwiazdka . $tekst[5] . $gwiazdka . $tekst[6] . $gwiazdka . $tekst[7] . $gwiazdka;
  24. ?>



Jak najprościej zaimplementować tego cenzora:

  1. <?php
  2. function Cenzura($txt){
  3. $Bluzgi=array( 
  4. "/bluzg(a|i|asz)/i\",
  5. \"/dup(a|y|o|sko)/i\"
  6. );
  7. return preg_replace( $Bluzgi, '####', $txt );
  8. }
  9. ?>


Kiedy sprawdzalibyście czy słowa są ok - w tym skrypcie który pokazałam na początku - przy wpisywaniu pozdrowień przez użytkownika, czy dopiero podczas pobierania pozdrowień do wyświetlenia a może jeszcze w innym momencie ?

Czy w tym przypadku $txt w funkcji cenzora to $txt=pozdrowienia.txt questionmark.gif


--------------------
Free mp3 download.
Go to the top of the page
+Quote Post
webasek
post 12.08.2008, 11:57:19
Post #2





Grupa: Zarejestrowani
Postów: 274
Pomógł: 35
Dołączył: 18.07.2008
Skąd: Kielce

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


Użył bym w tym miejscu

  1. <?php
  2. fwrite($plik, Cenzura($_POST[pozd])." r\n");
  3. ?>


--------------------
"Tylko dwie rzeczy są nieskończone: wszechświat oraz ludzka głupota,
choć nie jestem pewien co do tej pierwszej." Albert Einstein

Wirtualny Rynek Predykcyjny
Go to the top of the page
+Quote Post
golaod
post 12.08.2008, 12:14:33
Post #3





Grupa: Zarejestrowani
Postów: 419
Pomógł: 42
Dołączył: 12.08.2008
Skąd: Wrocław

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


webasek ma racje. Najlepiej, żeby to już od razu było zapisane w zmienionej postaci.
Btw. dodaj sobie też takie odmiany jak np /d(u|ó)p(a|y|o|sko|e.*)/i bo jednak pamiętaj, że można napisać h.. ch... ..uj ój itd, co jednak będzie miało znaczenie bo ludzię jednak są specjalistami w oszukiwaniu czegoś takiego (często własną głupotą i nie znajomością zasad pisowni). Dodałbym też jakieś sprawdzanie typu robienie spacji kropek itp. tzn po każdej literze zrobić coś takiego [^[:alnum:]]? czyli, że może wystąpić znak który nie jest ani cyfrą ani literą smile.gif
Go to the top of the page
+Quote Post
majestiq
post 12.08.2008, 15:04:21
Post #4





Grupa: Zarejestrowani
Postów: 235
Pomógł: 0
Dołączył: 26.10.2006

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


No właśnie jest dużo sposobów na obejście, ale nie znam na tyle dobrze php, żeby wszystkie a nawet część tych możliwości wykluczyć :/
Może znacie chociaż jakąś bazę tego typu słów, najlepiej z odmianą bo pisać te wszystkie okropieństwa z pamięci to lekkie przegięcie winksmiley.jpg


--------------------
Free mp3 download.
Go to the top of the page
+Quote Post
golaod
post 12.08.2008, 15:11:22
Post #5





Grupa: Zarejestrowani
Postów: 419
Pomógł: 42
Dołączył: 12.08.2008
Skąd: Wrocław

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


Niestety nie znam, ale sądzisz, że ich aż tak dużo jest ? Pamiętaj, że nie musisz cenzorować złożonych, wystarczy, że uda Ci się sam core zatuszować i też będzie dobrze np. wych..ać to niech chociaż zniknie do tego wy####ać i będzie to udany sposób smile.gif
Go to the top of the page
+Quote Post
Szunaj85
post 12.08.2008, 15:36:45
Post #6





Grupa: Zarejestrowani
Postów: 392
Pomógł: 7
Dołączył: 11.05.2008

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


Piszesz o cenzurowaniu, a dzień wcześniej użytkownik "Wredny" poruszał podobny problem. Tu masz dokładny adres: (http://forum.php.pl/PHPCenzura_t100243.html). W dodatku napisał on, że posiada bazę wulgaryzmów. Może udostępni Ci ją jak o nią poprosisz. Wtedy nie będziesz musiał pisać z pamięci. snitch.gif Moglibyście też połączyć siły żeby napisać w miarę dobrego cenzora. sekret.gif


--------------------
Jeśli Ci pomogłem wciśnij Jeśli mi pomożesz wcisnę
Go to the top of the page
+Quote Post
golaod
post 12.08.2008, 15:48:40
Post #7





Grupa: Zarejestrowani
Postów: 419
Pomógł: 42
Dołączył: 12.08.2008
Skąd: Wrocław

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


Tylko, że jak właśnie zauważyłeś to wymaga konkretnej bazy plików. preg_match lub str_replace cokolwiek takiego...jest znacznie szybsze,wymaga mniej nakładu.
Poza tym warto by właśnie dodać jeszcze zależności takie jak poruszone w/w wątku (dzięki szunaj za link) czyli nie podsłuchuj. Oznacza to, że trzeba dodać jeszcze pewne zależności.
Go to the top of the page
+Quote Post
majestiq
post 13.08.2008, 08:33:05
Post #8





Grupa: Zarejestrowani
Postów: 235
Pomógł: 0
Dołączył: 26.10.2006

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


Tamtego posta Wrednego nie zauważyłem, dzięki za linka .

"Tylko, że jak właśnie zauważyłeś to wymaga konkretnej bazy plików. preg_match lub str_replace cokolwiek takiego...jest znacznie szybsze,wymaga mniej nakładu."

No ale chyba preg_match lub str_replace musi wiedzieć jaką częśc ma zamienić na '#' i do tego potrzebna jest ta baza :-) ?!


--------------------
Free mp3 download.
Go to the top of the page
+Quote Post
golaod
post 13.08.2008, 08:41:01
Post #9





Grupa: Zarejestrowani
Postów: 419
Pomógł: 42
Dołączył: 12.08.2008
Skąd: Wrocław

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


Zrozum...Albo możesz mieć bazę liczącą np. 150 słów a odmian naprawdę jest CAŁY ogrom, albo zdefiniować core (np. tylko 5-10 wyrażeń) który będzie potrafił znaleźć wszystkie te słowa które normalnie ktoś by musiał spisać - a po co spisywać ?.
(TYLKO PRZYKŁADOWO)
chuj
chój
choi
chói
chui
hui
hooj
huuj
hooi
huui
(KONIEC PRZYKŁADU)
Do tego co podałem można jeszcze dodać prefixy i suffixy
czyli(też tylko przykład) ochujać czy wychujać
Więc po co się męczyć skoro można tylko napisać dobre wyrażenie regularne dla tego właśnie słowa ?
np. c?h(u|ó|o)+(j|i)+
w ten o to sposób już się nie martwisz się już czy ktoś napisze przez samo h czy ch, dodatkowo czy napisze u,ó czy o nawet po kilka razy i to samo się tyczy j oraz i. Wystarczy teraz dodać tylko obsługę prefixów i suffixów oraz np. fakt, że ktoś napisze c.h.u.j
Go to the top of the page
+Quote Post
majestiq
post 13.08.2008, 09:39:00
Post #10





Grupa: Zarejestrowani
Postów: 235
Pomógł: 0
Dołączył: 26.10.2006

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


W sumie może i masz rację.

10-20 najpopularniejszych wulgaryzmów + reg ex może rzeczywiście będzie lepsze niż
baza 2000 słów.

Czyli dla każdego słowa osobna linijka w php...
Słowa w tablicy nic nie dadzą (bo wyrażenie regularne będzie dla każdego się różniło) ?!


--------------------
Free mp3 download.
Go to the top of the page
+Quote Post
golaod
post 13.08.2008, 09:42:46
Post #11





Grupa: Zarejestrowani
Postów: 419
Pomógł: 42
Dołączył: 12.08.2008
Skąd: Wrocław

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


preg_replace przyjmuje tablice. Zatem wyrażenia możesz zapisać w tablicy wstawić jako pierwszy parametr. Jako drugi podajesz tylko xxx czy tam coś.
Go to the top of the page
+Quote Post
majestiq
post 13.08.2008, 10:53:52
Post #12





Grupa: Zarejestrowani
Postów: 235
Pomógł: 0
Dołączył: 26.10.2006

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


Czyli coś takiego:

  1. <?php
  2. $tekst = 'dupa';
  3. $Bluzgi=array( 
  4. "/bluzg(a|i|asz)/i\",
  5. \"/dup(a|y|o|sko)/i\"
  6. );
  7.  
  8. echo preg_replace( $Bluzgi, 'xxx', $tekst );
  9. ?>


Zresztą, to było już na początku :-)
A co znaczy: "/ przed 'bluzg' oraz po: /i\
i \"/ przed 'dup' questionmark.gif

Ten post edytował majestiq 13.08.2008, 10:58:10


--------------------
Free mp3 download.
Go to the top of the page
+Quote Post
golaod
post 13.08.2008, 10:56:01
Post #13





Grupa: Zarejestrowani
Postów: 419
Pomógł: 42
Dołączył: 12.08.2008
Skąd: Wrocław

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


Nie.
echo preg_replace($bluzgi,'xxxx',$tekst);
Go to the top of the page
+Quote Post
majestiq
post 13.08.2008, 10:57:36
Post #14





Grupa: Zarejestrowani
Postów: 235
Pomógł: 0
Dołączył: 26.10.2006

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


Wiem, zauważyłem błąd, ale mnie uprzedziłeś :-)


--------------------
Free mp3 download.
Go to the top of the page
+Quote Post
golaod
post 13.08.2008, 11:02:49
Post #15





Grupa: Zarejestrowani
Postów: 419
Pomógł: 42
Dołączył: 12.08.2008
Skąd: Wrocław

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


Nie wiem skąd to wziąłeś powinno być:
"/bluzg(a|i|asz)/i",
"/dup(a|y|o|sko)/i"
I teraz / na początku i końcu oznacza, że jest to wyrażenie regularne które ma być jakoś tam sobie interpretowane, a 'i' oznacza że podczas przeszukiwania ma nie zwracać uwagi na wielkość liter.
Go to the top of the page
+Quote Post
majestiq
post 13.08.2008, 12:32:03
Post #16





Grupa: Zarejestrowani
Postów: 235
Pomógł: 0
Dołączył: 26.10.2006

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


Ten kod skopiowałem z innego posta na podobny temat.

Zawsze myślałem, że wyrażenie regularne powinno zaczynać się od ^ a kończyć na $ a nie /,
ale rozumiem, że to nie tyczy się przypadku gdy interesujący nas string określany przez wyraźenie
znajduje się w dowolnym miejscu innego ciągu a nie np tylko na jego początku.


--------------------
Free mp3 download.
Go to the top of the page
+Quote Post
golaod
post 13.08.2008, 13:17:05
Post #17





Grupa: Zarejestrowani
Postów: 419
Pomógł: 42
Dołączył: 12.08.2008
Skąd: Wrocław

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


Tak właśnie.
^ oznacza, że od tego miejsca się string zaczyna,a kończy na $
Go to the top of the page
+Quote Post
majestiq
post 14.08.2008, 08:03:15
Post #18





Grupa: Zarejestrowani
Postów: 235
Pomógł: 0
Dołączył: 26.10.2006

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


Dobra, dzięki wielkie za pomoc.
Może coś z tego będzie biggrin.gif

Kurde, coś nie działa mi to:

  1. <?php
  2. $tekst=file_get_contents('zmiennap.txt');
  3. $Bluzgi=array( 
  4. "/bluzg(a|i|asz)/i",
  5. "/dup(a|y|o|sko)/i",
  6. "/huj(a|i|e|u)/i"
  7. );
  8.  
  9. echo preg_replace( $Bluzgi, 'xxx', $tekst );
  10. ?>


W pobieranym tekście mam słowa, które powinny zostać zamienione (takie jak w $bluzgi), ale nic się nie podmienia :/


--------------------
Free mp3 download.
Go to the top of the page
+Quote Post
nospor
post 14.08.2008, 08:10:12
Post #19





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




bo zapomniano o tym, ze literki z nawiasow mogą ale nie muszą wystąpić:
  1. <?php
  2. $Bluzgi=array( 
  3. "/bluzg(a|i|asz)?/i",
  4. "/dup(a|y|o|sko)?/i",
  5. "/huj(a|i|e|u)?/i"
  6. );
  7. ?>


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

"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
majestiq
post 22.08.2008, 16:47:54
Post #20





Grupa: Zarejestrowani
Postów: 235
Pomógł: 0
Dołączył: 26.10.2006

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


Dzięki kolego exclamation.gif!

A co dodać na początku:

  1. <?php
  2. "/bluzg(a|i|asz)?/i"
  3. ?>



żeby słowo 'zbluzgasz' też zostało zastąpione ?


  1. <?php
  2. "/z?bluzg(a|i|asz)?/i"
  3. ?>


coś mi nie działa :/

P.S. W ogóle po co jest / przed bluzg questionmark.gif

Ten post edytował majestiq 25.08.2008, 07:30:11


--------------------
Free mp3 download.
Go to the top of the page
+Quote Post

2 Stron V   1 2 >
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: 9.07.2025 - 04:21