[PHP] bb-codes - so geht's

Dieses Thema im Forum "Programmier Tutorials" wurde erstellt von t-low, 9. Juni 2007 .

Status des Themas:
Es sind keine weiteren Antworten möglich.
  1. 9. Juni 2007
    bb-codes - so geht's

    Ich wollte mal n bisschen was darüber schreiben, wie man bb-codes am besten löst.
    Also...
    Als erstes mal ein stinknormales formular, wo der benutzer eine nachricht eingben kann, mit BB-Codeds:
    PHP:
    <?
    // index.php
    print  "
    <html>
    <head>
    <title>BB </title>
    </head>
    <body>
    <form action=auswertung.php method=post>

    <textarea name=message>
    Hier nachricht mit bb-codes eingeben
    </textarea>
    <input type=submit>
    </form>

    <body>
    </html> 
    "

    ?>
    ok, bis jetzt haben wir nur ein formular, da snichts macht, also brauchen wir jetzt die auswertung.php

    PHP:
    <?
    //auswertung.php

    $msg  $_POST [ 'message' ];  // die nachricht übernehmen

    print  $msg ;

    ?>
    Sooo, jetzt müsste das script die eingetippte nachricht ausgeben, aber ohne irgendwelche formatierungen...
    also müssten wir als erstes dafür sorgen, dass zeilenumbrüche ausgegeben werden, das geht so:

    PHP:
    //...
    $nz  chr ( 13 ). chr ( 10 );  //zeilenumbrüche suchen und dur $nz ersetzen
    $msg  str_replace ( $nz "<br>"  , $msg );  // $nz durch <br> ersetzen
    //...

    wenn wir das vor das print $msg; einsetzen, erhalten wir eine ausgebe mit zeilenumbrüchen, wo wir welche gemacht haben
    Jetzt gwehen wir davon aus, dass wir zb. [noparse][b] text [/b][/noparse] schreiben und text (<b>text</b>) erhalten könnten wir ja wie folgtr schreiben
    PHP:
    $msg  str_replace ( "[b]" "<b>" $msg );
    $msg  str_replace ( "[/b]" "<b>" $msg );
    //usw..
    Aber was passiert, wenn der benutzer jetzt das b groß schreibt... dann würde das ganze script nich funktionieren! Aber dafür hat php eine funktion, nämlich preg_replace
    Sie wird wie folgt angewand:
    PHP:
    $msg  preg_replace ( "!\[b\](.*)\[/b\]!isU" , "<b>$1</b>" , $msg );
    so, wenn wir das einfügen müssteb b-tags funktionieren
    das geht natürlich genause mit i (kursiv) und u(unterstrichen) uns s (durchgestrichen ):
    PHP:
    $msg  preg_replace ( "!\[u\](.*)\[/u\]!isU" , "<u>$1</u>" , $msg );
    $msg  preg_replace ( "!\[i\](.*)\[/i\]!isU" , "<i>$1</i>" , $msg );
    $msg  preg_replace ( "!\[s\](.*)\[/s\]!isU" , "<s>$1</s>" , $msg );

    WEnn wir jetzt auch noch formatierungsmöglichkeiten reinbringen wollen können wir es nach fast dem glaichen prinzip machen:
    PHP:

    $msg 
    preg_replace ( "!\[center\](.*)\[/center\]!isU" , "<center>$1</center>" $msg );
    $msg  preg_replace ( "!\[left\](.*)\[/left\]!isU" , "<div align=left>$1</div>" , $msg );
    $msg  preg_replace ( "!\[right\](.*)\[/right\]!isU" , "<div align=right>$1</div>" , $msg );

    genausoleich t ist das mit img- und url tags :
    PHP:

    $msg 
    preg_replace ( "!\[url\](.*)\[/url\]!isU" , "<a href=\"$1\" target=\"_blank\">$1</a>" , $msg );
    $msg  preg_replace ( "!\[img\](.*)\[/img\]!isU" , "<img src=\"$1\" alt=$1>" , $msg );
    bei den url= - und color-tags is das ganze ein bisschen anders, weil 2 stellen vorkommen, bei denen ein wert ausgelesen wird:
    PHP:

    $msg 
    preg_replace ( "!\[color=(.*)\](.*)\[/color\]!isU" , "<span style=\"color:$1;\">$2</span>" , $msg );  //dabei ist $1 die farbe und $2 der farbige text

    $msg  preg_replace ( "!\[url=(http://|www|http://www)(.*)\](.*)\[/url\]!isU" , "<a href=\"$1$2\" target=\"_blank\">$3</a>" , $msg );

    und so könnt ihr alle möglichen codes bauen zum beispiel bei einem spie [player] tags, die einen link auf das benutzerprofil geben sollen
    PHP:
    $msg  preg_replace ( "!\[player\](.*)\[/player\]!isU" , "<a href=usersuche.php?search=$1>$1</a>" , $msg );

    So jetzt fasse ich die auswertung.php nochmal zusammen:
    PHP:
    //auswertung.php
    <?
    //auswertung.php
    $msg  $_POST [ 'message' ];  // die nachricht übernehmen

    $nz  chr ( 13 ). chr ( 10 );  //zeilenumbrüche suchen und dur $nz ersetzen
    $msg  str_replace ( $nz "<br>"  , $msg );  // $nz durch <br> ersetzen

    $msg  preg_replace ( "!\[b\](.*)\[/b\]!isU" , "<b>$1</b>" , $msg );   //fett
    $msg  preg_replace ( "!\[u\](.*)\[/u\]!isU" , "<u>$1</u>" , $msg );  //unterstrichen
    $msg  preg_replace ( "!\[i\](.*)\[/i\]!isU" , "<i>$1</i>" , $msg );  //kursiv
    $msg  preg_replace ( "!\[s\](.*)\[/s\]!isU" , "<s>$1</s>" , $msg );   //durchgesrtichen
    $msg  preg_replace ( "!\[center\](.*)\[/center\]!isU" , "<center>$1</center>" $msg ); //zentriert
    $msg  preg_replace ( "!\[left\](.*)\[/left\]!isU" , "<div align=left>$1</div>" , $msg );  // linksbündig
    $msg  preg_replace ( "!\[right\](.*)\[/right\]!isU" , "<div align=right>$1</div>" , $msg );  // rechtsbündig
    $msg  preg_replace ( "!\[url\](.*)\[/url\]!isU" , "<a href=\"$1\" target=\"_blank\">$1</a>" , $msg );
    $msg  preg_replace ( "!\[img\](.*)\[/img\]!isU" , "<img src=\"$1\" alt=$1>" , $msg ); 
    $msg  preg_replace ( "!\[color=(.*)\](.*)\[/color\]!isU" , "<spanstyle=\"color:$1;\">$2</span>" , $msg ); 
    $msg  preg_replace ( "!\[url=(http://|www|http://www)(.*)\](.*)\[/url\]!isU" , "<a href=\"$1$2\" target=\"_blank\">$3</a>" , $msg ); 



    print 
    $msg ;

    ?>



    So.. das wars, ich hoffe ich hab euch geholfen, aber wenn nich, dann kopiert ihr einfach die auswertung und benutzt sie wie sie is. wenn ihr fehler findet, schreibt bitte ne pm an mich!(am besten mit lösung)

    ich hoffe, es nützt euch
     
  2. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.