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




Tak, ale u Ciebie także. Jakim cudem? Ano takim, że ma on przykładowo X słów z Y końcówkami. Słówko "cod" zostanie sprawdzone pod kątem występowania jako słowa:
cod, coded, codes, coding, cods, coder, coders
A co u Ciebie? Ty każde z nich piszesz jako osobny regexp (!) Nadal nie widzisz, że oba rozwiązania wcale nie są bardzo inne? Ja patrząc z boku tak to widzę. Ty jako użytkownik swojego rozwiązania tego nie zauważasz, zachłystując się rzekomo mniejszą ilością regexp. Ale to tylko złudzenie. Napisz teraz swoje tak, by objęło owo X wyrazów wraz z Y możliwymi końcówkami swoją metodą (IMG:style_emoticons/default/winksmiley.jpg) Pochlastasz się przy pisaniu regexp numer 432 (IMG:style_emoticons/default/winksmiley.jpg)
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, 20:29:41 ) *
Tak, ale u Ciebie także. Jakim cudem? Ano takim, że ma on przykładowo X słów z Y końcówkami. Słówko "cod" zostanie sprawdzone pod kątem występowania jako słowa:
cod, coded, codes, coding, cods, coder, coders
A co u Ciebie? Ty każde z nich piszesz jako osobny regexp (!) Nadal nie widzisz, że oba rozwiązania wcale nie są bardzo inne? Ja patrząc z boku tak to widzę. Ty jako użytkownik swojego rozwiązania tego nie zauważasz, zachłystując się rzekomo mniejszą ilością regexp. Ale to tylko złudzenie. Napisz teraz swoje tak, by objęło owo X wyrazów wraz z Y możliwymi końcówkami swoją metodą (IMG:style_emoticons/default/winksmiley.jpg) Pochlastasz się przy pisaniu regexp numer 432 (IMG:style_emoticons/default/winksmiley.jpg)

No i dalej nie przyjrzałeś się dokładnie rozwiązaniom (IMG:style_emoticons/default/smile.gif)
Cytat
Ty każde z nich piszesz jako osobny regexp (!)

Oh, rly?
  1. $config = array(
  2. array('pattern' => '/(\W+)cod(|ed|es|ing|s|er|ers)(\W+)/si', 'replace' => '$1***$2$3 ')
  3. );

albo jeszcze lepiej (to załatwia wszystkie końcówki)
  1. $config = array(
  2. array('pattern' => '/(\W+)cod(|\w+)/si', 'replace' => '$1***$2')
  3. );

i sprawa załatwiona. Nie muszę rozbijać wypowiedzi na tablicę wyrazów przy pomocy explode() i nie muszę generować za każdym razem wyrażenia regularnego. Jeśli nadal chcesz się kłócić co jest szybsze możesz to przetestować. Jeśli nie będzie Ci się chciało a dalej będziesz pisał że w w moim rozwiązaniu wykonuje się więcej regeqpów po powrocie z roboty Ci to sam udowodnie (IMG:style_emoticons/default/smile.gif)
Cytat
Napisz teraz swoje tak, by objęło owo X wyrazów wraz z Y możliwymi końcówkami swoją metodą winksmiley.jpg Pochlastasz się przy pisaniu regexp numer 432 winksmiley.jpg

Proszę bardzo:
  1. $config = array(
  2. array('pattern' => '/(\W+)wyraz_1(|\w+)/si', 'replace' => '$1*****$2'),
  3. array('pattern' => '/(\W+)wyraz_2(|\w+)/si', 'replace' => '$1*****$2'),
  4. array('pattern' => '/(\W+)wyraz_3(|\w+)/si', 'replace' => '$1*****$2'),
  5. array('pattern' => '/(\W+)wyraz_4(|\w+)/si', 'replace' => '$1*****$2'),
  6. array('pattern' => '/(\W+)wyraz_X(|\w+)/si', 'replace' => '$1*****$2')
  7. );
  8.  
  9. //albo
  10.  
  11. $config = array(
  12. array('pattern' => '/(\W+)(wyraz_1|wyraz_2|wyraz_3|wyraz_4|...|wyraz_X)(|\w+)/si', 'replace' => '$1*****$3'),
  13. );
  14.  


Jakoś można się wyrobić nawet w jednym regexpie (IMG:style_emoticons/default/smile.gif)
Może po prostu nie do końca zdajesz sobie sprawę jakie możliwości dają wyrażenia regularne :/

Ten post edytował Methestel 17.03.2010, 17:53:32
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: 15.10.2025 - 01:43