#1 14. Mai 2009 Wortzensur Hallo liebe Entwickler und vllt Entwicklerinnen Ich bin ein grade dabei für ein Script eine Badword-Funktion zu schreiben, die einen Text nach bestimmten Wörtern durchsucht und diese dann gegen ein Bild austauscht. Nur macht die Funktion noch leichte faxen und hoffe einer kann mir dabei Helfen PHP: $badword =array( "****" , "********" , "*****" , "****nsohn" ); Habe die Badwords gegen Wort(Zahl) ausgetauscht weil sie hier ja sonst auch zensiert werden. PHP: $zensiert =array( "<img src='images/system/icon_censored.gif' alt='zensiert' />" ); Das ist das Bild mit der die Wörter dann zensiert bzw ausgetauscht werden sollen. Und hier nun der ganze Quellcode: PHP: include( "badwords.inc.php" ); function Zensur ( $NewsText , $sWort , $zWort ) { return str_ireplace ( $sWort , $zWort , $NewsText ); } $Test = "Hallo du verdammte ****, deine Mutter ist so eine ******** und dein Vater ein ****nsohn" ; echo Zensur ( $Test , $badword , $zensiert ); Aber als Ausgabe bekomme ich folgendes: _*1_ => hier wird gar nicht zensiert sondern nur entfernt -.- Was mache ich falsch -.-' Vielen Dank für die Hilfe BW ist sicher MfG B30w0lf
#3 14. Mai 2009 AW: Wortzensur php dokumentation lesen hilft: http://us2.php.net/str_ireplace folglich ersetzt die funktion jedes vorkommen von "****" mit deinem html-code. dann findet die funktion einen weiteren match und ersetzt diesen mit einem leeren string... liest man in der doku weiter: erkennt man, dass du $zensiert einfach als string übergeben musst...
#4 14. Mai 2009 AW: Wortzensur Du hast dich bei den Parametern von [G]str_replace[/G] vertan, und für $zensiert brauchst du kein Array. Richtig lautet es also: PHP: <? php function Zensur ( $sWort , $zWort , $NewsText ) { return str_ireplace ( $sWort , $zWort , $NewsText ); } $badword = array( "****" , "********" , "*****" , "****nsohn" ); $zensiert = "<img src='images/system/icon_censored.gif' alt='zensiert' />" ; $Test = "Hallo du verdammte ****, deine Mutter ist so eine ******** und dein Vater ein ****nsohn" ; echo Zensur ( $badword , $zensiert , $Test ); ?>
#5 14. Mai 2009 AW: Wortzensur PHP: <? php $badwords = array( '****' , '********' , '*****' , '****nsohn' ); $replace = '*zensiert*' ; $text = 'Hallo du verdammte ****, deine Mutter ist so eine ' . '******** und dein Vater ein ****nsohn' ; $pattern = '~(^|\s|[[:punct:]])(?:' . implode ( '|' , $badwords ) . ')(\s|[[:punct:]]|$)~i' ;print preg_replace ( $pattern , '$1' . $replace . '$2' , $text ); ?> nachtischlampe usw. werden damit nicht zensiert
#7 14. Mai 2009 AW: Wortzensur ja komm... der ts ist nicht fähig die php-doku zu lesen und dann soll er ein so schönes regex verstehen...
#8 14. Mai 2009 AW: Wortzensur Versuchs mal damit: PHP: $text = "Ein Penner lag mit einem Asylanten auf der Bank, während ein Kiffer vorbeiging.." ; // Badwords $words = array( "/penner/i" , "/asylant/i" , "/kiffer/i" ); // Clen Text $ctext = preg_replace ( $words , "<img src=\"\" alt=\"\" >" , $text ); echo $ctext ; Denke so sollte es besser sein € Da war schon wer schneller ;> Suchs dir aus^^
#9 14. Mai 2009 AW: Wortzensur Finde ich nicht, eher unnötig kompliziertes - wofür gibt es Word Boundaries? Besser: PHP: $pattern = '~\b(?:' . implode ( '|' , $badwords ). ')\b~i' Und Capture Groups braucht man dann auch nicht mehr, sondern man kann direkt mit $replace ersetzen.
#10 15. Mai 2009 AW: Wortzensur mit "schön" war zum einen gemeint: "unnötig", zum anderen habe ich damit "zu kompliziert" ausdrücken wollen. ich werde mich bemühen in zukunft solche äußerungen mit ironie-tags zu kennzeichnen... im übrigen ist die replace variante für die zwecke vom TS mehr als ausreichend... wenn er sie auch so einsetzt, wie man es sich durch einfaches lesen in der php-doku auch selbst erarbeiten kann...
#11 15. Mai 2009 AW: Wortzensur im grunde habt ihr ja recht. warscheinlich taucht der regex dann 10mal im ganzen script auf wegen strg+c & strg+v (die selben badwords+replace gleich mit) [x] erledigt ~ closed