Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP] Cenzura
marcin0077
post
Post #1





Grupa: Zarejestrowani
Postów: 94
Pomógł: 0
Dołączył: 18.10.2008

Ostrzeżenie: (10%)
X----


Witam

Mam shoutboxa i zrobiona cenzurę. Cenzuruję wpisane słowa ale chciałbym zrobić ze np po znalezieniu zakazanego słowa skrypt cenzurował całą wiadomość.
Może ktoś pomóc?

kod cenzury

  1. function censor($str) {
  2. global $prefs;
  3.  
  4. $cWords = explode(',', $prefs['censorWords']);
  5. $words = explode(' ', $str);
  6. $endings = '|ed|es|ing|s|er|ers';
  7. $arrEndings = explode('|', $endings);
  8.  
  9. foreach ($cWords as $cWord) foreach ($words as $i=>$word) {
  10. $pattern = '/^(' . $cWord . ')+(' . $endings . ')\W*$/i';
  11. $words[$i] = preg_replace($pattern, str_repeat('*', strlen($word)), $word);
  12. }
  13.  
  14. $i = implode(' ', $words);
  15. $cen = array('********');
  16. $a = str_replace($cen, "", $i);
  17. return $a;
  18. }
Powód edycji: [blooregard]: Na przyszłość spójrz, co wrzucasz na forum, bo nie każdy tu jest pełnoletni [thek]: miałeś literówkę w $cen = array. Brak apostrofu zamykającego.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
thek
post
Post #2





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




Jego rozwiązanie jest dobre... dla języka angielskiego (chodzi o końcówki) (IMG:style_emoticons/default/smile.gif) Z polskim sprawuje się nieco gorzej. Twój sposób Methestel to niestety masa wpisów i masa wyrażeń regularnych do wykonania. Każdy wyraz to byłoby osobne a przy kilkuset już byłoby zapewne odczuwalne to, nie mówiąc o tysiącach (IMG:style_emoticons/default/smile.gif) Nie wyobrażam sobie ręcznego ustawiania tego wszystkiego, pisania tych wszystkich wyrażeń. To co proponujesz jest już bliższe Tezaurusowi niż prostemu cenzurowaniu.
Go to the top of the page
+Quote Post
Methestel
post
Post #3





Grupa: Zarejestrowani
Postów: 46
Pomógł: 10
Dołączył: 30.06.2008

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


Cytat(thek @ 16.03.2010, 09:16:51 ) *
Jego rozwiązanie jest dobre... dla języka angielskiego (chodzi o końcówki) (IMG:style_emoticons/default/smile.gif) Z polskim sprawuje się nieco gorzej. Twój sposób Methestel to niestety masa wpisów i masa wyrażeń regularnych do wykonania. Każdy wyraz to byłoby osobne a przy kilkuset już byłoby zapewne odczuwalne to, nie mówiąc o tysiącach (IMG:style_emoticons/default/smile.gif) Nie wyobrażam sobie ręcznego ustawiania tego wszystkiego, pisania tych wszystkich wyrażeń. To co proponujesz jest już bliższe Tezaurusowi niż prostemu cenzurowaniu.


Regexp-y wykonywane są na całej wypowiedzi, nie na poszczególnych wyrazach dzięki czemu ilość regexp-ów zmniejsza się (a nie zwiększa) i to dość znacznie. Powiedzmy że mamy wypowiedz złożoną z 100 wyrazów. Cenzurujemy powiedzmy 5 wyrazów. U kolegi wykona się łącznie 500 regexp-ów (zagnieżdzona pętla foreach) u mnie za to tylko 5.
Ustawianie tego jest tak samo trudne jak u kolegi. Jeśli chcę cenzurować n słów to będę miał n wpisów. W przykładzie poza cenzurowaniem pokazane są też inne możliwości jakie daje moje rozwiązanie tj. zamiana tekstu, poprawianie typowych błędów. W bardzo łatwy sposób można też dodać to czego kolega potrzebuje czyli cenzurowanie linków w tekstach. No i na koniec to na czym koledze zależało czyli licznik ocenzurowanych słów.

Proponuje jeszcze raz przeanalizować obydwa rozwiązania.



Go to the top of the page
+Quote Post

Posty w temacie


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

 



RSS Aktualny czas: 12.10.2025 - 07:59