Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [Funkcja] Cenzura
Forum PHP.pl > Forum > Gotowe rozwiązania > Algorytmy, klasy, funkcje
decha-design
Na potrzeby mojego aktualnego projektu, byłem zmuszony(?) do napisania skryptu / funkcji cenzurującej wszystkie dane dodawane do bazy przez użytkowników. No i napisałem, nie działa w 100%, bo owszem jak wiadomo, nie ma skryptów idioto podobnych (Murphy) ... nie wyłapie czegoś takiego jak k.u.r.w.a czy koorwa etc. To już byłaby przesada =)

Więc zacznijmy od początku. Funkcja
  1. <?php
  2. function censorship($text) {
  3.          
  4.           $query = mysql_query("SELECT * FROM censorship");
  5.          
  6.           while($censorship = mysql_fetch_array($query)) {
  7.              
  8.               $patterns[] = '/'.$censorship[pattern].'/i';
  9.              
  10.           }
  11.          
  12.           $replace = '$%#%#';
  13.          
  14.           $text = preg_replace($patterns, $replace, $text);
  15.          
  16.           return $text;
  17.          
  18.       }
  19. ?>


po prostu wklejamy to gdzieś na górę pliku i później tylko censorship($text) gdzie $text to coś co przesyła użytkownik. Osobiście polecam używac to przy WYŚWIETLANIU danych.

Ok. PHP mamy za sobą, teraz MySQL (kodowanie UTF-8):
  1. CREATE TABLE IF NOT EXISTS `censorship` (
  2. `id` int(11) NOT NULL AUTO_INCREMENT,
  3. `pattern` tinytext collate utf8_polish_ci NOT NULL,
  4. PRIMARY KEY (`id`)
  5. ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_polish_ci AUTO_INCREMENT=17 ;
  6.  
  7. INSERT INTO `censorship` (`id`, `pattern`) VALUES
  8. (1, '(za|w|)(q|k)(u|Ăł)r(wiszon|wom|wo|wy|wach|wa|wami|ewstwem|ew|wa|wÄ…|wÄ(tm)|wie|w)'),
  9. (2, '(przy|prze|pod|roz|od|do|)pierd(o|Ăł)l(iĹ‚ybyĹ›|iliby|liĹ›|iĹ‚o|ić|iĹ‚by|Ä…|Ä(tm)|i|am|ać|y|)'),
  10. (3, '(o|)(c|)h(u|Ăł)j(owymi|owym|owych|owemu|owego|owej|owi|owo|owy|owe|owa|owÄ…|om|em|ami|ach|Ăłw|a|e|)'),
  11. (4, '(c|ć)ip(ach|ami|om|ie|y|a|Ä(tm)|Ä…|)'),
  12. (5, '(f|s)uck(er|)'),
  13. (6, 'matkojebc(ach|ami|om|Ăłw|y|Ä…|Ä(tm)|a)'),
  14. (7, 'kurestw(ach|ami|em|ie|o|a|u|)'),
  15. (8, '(z|za|w|pod|roz|do|)jeb(aĹ„c|niec|niÄ(tm)|aĹ‚ybyĹ›|alibyĹ›|ali|ać|aĹ‚|an|ie|)'),
  16. (9, 'pizd(zie|om|Ä…|Ä(tm)|y|a|)'),
  17. (10, 'piĹşdzie(lcach|lca|lce|lcom|lcu|lcy|lec|)'),
  18. (11, 'szmat(ławiec|a|o|y)'),
  19. (12, 'kutas(ek|y|ie|em|a|)'),
  20. (13, 'fiut(ek|em|y|a|)'),
  21. (14, 'spierdalaj'),
  22. (15, 'skurwiel(ami|ach|em|li|e|a|)'),
  23. (16, 'bitch(es|)');
No i cała filozofia ... haha.gif

Mam nadzieję, że się przyda. Jeżeli jakieś konstruktywne uwagi to bardzo proszę - na pewno się przydadzą haha.gif

Pzdr.
GrayHat
Witaj.

A nie lepiej trzymać te regułki w pliku xml lub ini?
Czy naprawdę jest do tego potrzebna baza danych?
No a jeżeli już jest potrzebna to czy potrzebny jest klucz główny? Rozumiem, że możemy dopisać administrację regułkami (opcje edytuj/usuń odwoływały by się do rekordów po ID) ale w twoim "gotowym rozwiązaniu" taka administracja nie występuje więc w jakim celu te ID?? ;]

Takie przemyślenia w noc świąteczną winksmiley.jpg

Pozdrawiam
decha-design
Cóż, racja ... ale owa tabelę eksportowałem z bazy danych, do której jest administracja, więc ID było potrzebne =))
A co do XML lub INI, jak kto woli. Może kiedyś zrobię to pod xml =)
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.