[PHP] Wortzensur

Dieses Thema im Forum "Webentwicklung" wurde erstellt von B30w0lf, 14. Mai 2009 .

Status des Themas:
Es sind keine weiteren Antworten möglich.
  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
     
  2. 14. Mai 2009
    AW: Wortzensur

    nur mal so.. warum is $zensiert auch n array?
     
  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
     
  6. 14. Mai 2009
    AW: Wortzensur

    Lag ich doch also richtig mit meiner Array Vermutung =)
     
  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
     
  12. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.