Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] Cenzura - trochę ambitniej
Forum PHP.pl > Forum > Przedszkole
macek
Przeglądałem forum, porad dot cenzurowania słów jest kilka, ale wiedziałem że większość ludzi miało problem z wielkością liter :]
W moim przypadku problem jest troszkę inny..
  1. <?php
  2. unction Cenzura( $content ) {
  3. global $db;
  4. $censure = array();
  5. $q = 'SELECT Word ' .
  6. 'FROM CensureWord';
  7. $rs = $db->Execute( $q );
  8. while( !$rs->EOF ) {
  9. $censure[] = $rs->fields['Word'];
  10. $rs->MoveNext();
  11. }
  12. $z = array( '>', '<' );
  13. $na = array( '> ', ' <' );
  14. $out = str_replace( $z, $na, $content );
  15. $foo = explode( ' ', $out );
  16. foreach( $foo as $k => $fo ) {
  17. $fo = strtolower( $fo );
  18. if( in_array( $fo , $censure ) ) {
  19. $foo[$k] = '[cenzura]';
  20. }
  21. }
  22. $out = implode( ' ', $foo );
  23. return $out;
  24. ?>


Pętla foreach jest iterowana po tablicy której indeksy zawierają po jednym wyrazie zapodanego tektu $content. Ja już mówiłęm z wielkością znakół nie ma problemu, natomiast jak jak to zmodyfikować żeby np dla cenzurowanego słowa *pa wyszukiwał wszystkie wyrazy kończące się na pa i je też cenzurował ?
Próbowałem foreacha zmienić tak:
  1. <?php
  2. foreach( $foo as $k => $fo ) {
  3. $fo = strtolower( $fo );
  4. if( in_array( $fo , eregi_replace( '*', '([a-zA-Z0-9 -_]+)', $censure ) ) ) {
  5. $foo[$k] = '[cenzura]';
  6. }
  7. }
  8. ?>


ale tak jak się domyślałem, trochę przekombinowane i kończy się tak:

Notice: Array to string conversion in ... on line 657
Warning: eregi_replace(): REG_BADRPT in .. on line 657
Warning: in_array(): Wrong datatype for second argument in ... on line 657

dla każdego wyrazu w tekście.. Linijka 657 to oczywiście
  1. <?php
  2. if( in_array( $fo , eregi_replace( '*', '([a-zA-Z0-9 -_]+)', $censure ) ) ) {
  3. ?>

Ma ktoś jakies sugestie / pomysły ? smile.gif
PUPI
Proponuje zajrzeć do manuala i sprawdzić jakie typy powinna przyjmować funkcja in_array" title="Zobacz w manualu PHP" target="_manual oraz jakie typy powinna przyjmować i zwracać funkcja eregi_replace" title="Zobacz w manualu PHP" target="_manual.
macek
Dzięki testom już do tego doszedłem :]
Chąc nie chąc - to nie rozwiązuje problemu smile.gif

Nikt nie ma pomysłu na to ? ;\
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.