[PHP] BB-Code umsetzen

Dieses Thema im Forum "Webentwicklung" wurde erstellt von Fuselmeister, 27. November 2009 .

Schlagworte:
Status des Themas:
Es sind keine weiteren Antworten möglich.
  1. 27. November 2009
    BB-Code umsetzen

    Hi
    ich möchte BB Code in meine Seite einbauen. Hab mal nen bisschen gegoogelt und eine Möglichkeit gefunden, die funktioniert.
    So siehts aus:
    PHP:
    function  bbcode2html ( $text $parsesmile  true )
     {
      
    // Emoticons                                                                           
      
    if ( $parsesmile )
       {
        
    $text  str_replace ( ':)' '<img src="res/imgs/emoticons/smile.png" alt=":)" />' $text );
        
    $text  str_replace ( ':D' '<img src="res/imgs/emoticons/laugh.png" alt=":D" />' $text );
        
    $text  str_replace ( ';)' '<img src="res/imgs/emoticons/zwinker.png" alt=";)" />' $text );
        
    $text  str_replace ( ':(' '<img src="res/imgs/emoticons/unhappy.png" alt=":(" />' $text );
        
    $text  str_replace ( ':P' '<img src="res/imgs/emoticons/zunge.php" alt=":P" />' $text );
       }
      
      
    // Formatierung                                                                        
      
      
    $text  preg_replace ( '/\[b\](.*?)\[\/b\]/' '<b>$1</b>' $text );
      
    $text  preg_replace ( '/\[i\](.*?)\[\/i\]/' '<i>$1</i>' $text );  
      
    $text  preg_replace ( '/\[u\](.*?)\[\/u\]/' '<u>$1</u>' $text );  
      
    $text  preg_replace ( '/\[B\](.*?)\[\/B\]/' '<b>$1</b>' $text );
      
    $text  preg_replace ( '/\[I\](.*?)\[\/I\]/' '<i>$1</i>' $text );  
      
    $text  preg_replace ( '/\[U\](.*?)\[\/U\]/' '<u>$1</u>' $text );  
      
    $text  preg_replace ( '/\[center\](.*?)\[\/center\]/' , '<div align="center">$1</div>' $text );
      
    $text  preg_replace ( '/\[right\](.*?)\[\/right\]/' , '<div align="right" style="text-align: right;">$1</div>' $text );
      
    $text  preg_replace ( '/\[CENTER\](.*?)\[\/CENTER\]/' , '<div align="center">$1</div>' $text );
      
    $text  preg_replace ( '/\[RIGHT\](.*?)\[\/RIGHT\]/' , '<div align="right" style="text-align: right;">$1</div>' $text );
      
    $text  preg_replace ( '/\n/' '<br/>' $text );
      
      
    // Links, Bilder etc.                                                                  
      
    $text  preg_replace ( '/\[url=(.*?)\](.*?)\[\/url\]/' '<a href="$1" target="_blank" class="yearstat" style="text-decoration: underline;">$2</a>' $text );  
      
    $text  preg_replace ( '/\[img](.*?)\[\/img\]/' '<img src="$1" border="0"/>' $text );  
      
    $text  preg_replace ( '/\[URL=(.*?)\](.*?)\[\/URL\]/' '<a href="$1" target="_blank" class="yearstat" style="text-decoration: underline;">$2</a>' $text );  
      
    $text  preg_replace ( '/\[IMG](.*?)\[\/IMG\]/' '<img src="$1" border="0"/>' $text );  
      
      
    // Sonstiges                                                                           
      
    $text  preg_replace ( '/\[zitat=(.*?)\](.*?)\[\/zitat\]/' '<div class="quote"><div class="quote_title">Zitat von $1:</div>$2</div>' $text );
      
    $text  preg_replace ( '/\[ZITAT=(.*?)\](.*?)\[\/ZITAT\]/' '<div class="quote"><div class="quote_title">Zitat von $1:</div>$2</div>' $text );
      
      
      
      return 
    $text ;
     }
    Problem ist nur, dass die Tags nicht verschachtelt werden können. Also wenn ich schreibe
    Code:
    [ZITAT=a]dfal[ZITAT=b]dfhkl[/ZITAT][/ZITAT]
    parst der nur den ersten tag...

    wie stell ich das an, dass der mir alles Tags richtig parst und so auch verschachtelungen möglich werden?

    mfg
    Fuselmeister
     
  2. 28. November 2009
    AW: BB-Code umsetzen

    Müsstest halt theoretisch den ausgegebenen Wert nochmal durch die Funktion jagen..
    Und dann iwie prüfen, ob etwas replaced wurde..
    Wenn ja dann nochmal durch die Funktion und sonst halt nicht..
     
  3. 28. November 2009
    Zuletzt von einem Moderator bearbeitet: 14. April 2017
    AW: BB-Code umsetzen

    hört sich an wie 5min drüber nachgedacht, aber hauptsache hier was geschrieben ^^

    ---

    einen bbcode-parser schreibt man (da tags verschachtelt werden sollen) rekursiv und nicht nur mit regulären ausdrücken, sondern mit nem stack+token system.

    also erst den text in tokens umwandeln (bbcodes und text) und dann rekursiv abarbeiten. dann kann man auch schön die syntax überprüfen, inline und block-elemente richtig verschachteln und bbcodes nachladen lassen.

    ich poste morgen oder die tage mal meine bbcode-library (php5.3)

    //edit: No File | xup.in

    PHP:
    require  'bbcode/Compiler.class.php' ;
    $comp  = new  lib bbcode Compiler ();  //leerzeichen mit backslashes ersetzten, boardsoftware ****t
    print  $comp -> compile ( '[b]hallo [i]welt[/i][/b]' );
    resultat:
    Code:
    <strong>hallo <em>welt</em></strong>
     
  4. 28. November 2009
    Zuletzt von einem Moderator bearbeitet: 14. April 2017
    AW: BB-Code umsetzen

    sowas wird glaub ich auf ne endlosschleife hinauslaufen, weil man dann ja nach jedem aufruf der funktion prüfen müsste... währe glaub ich destruktiv^^

    thx für die lib. ich werd die mal ausprobieren.

    edit:
    Mmm... iwie funzt das implementieren nich :'(
    Code:
    require '../res/classes/bbcode/Compiler.class.php';
    $comp = new lib\bbcode\Compiler(); // Ich bin Zeile 3 ;)
    
    function bbcode2html($text, $parsesmile = true)
     {
     // Emoticons 
     if ($parsesmile)
     {
     $text = str_replace(':)', '<img src="../res/imgs/emoticons/smile.png" alt=":)" />', $text);
     $text = str_replace(':D', '<img src="../res/imgs/emoticons/laugh.png" alt=":D" />', $text);
     $text = str_replace(';)', '<img src="../res/imgs/emoticons/zwinker.png" alt=";)" />', $text);
     $text = str_replace(':(', '<img src="../res/imgs/emoticons/unhappy.png" alt=":(" />', $text);
     $text = str_replace(':P', '<img src="../res/imgs/emoticons/zunge.php" alt=":P" />', $text);
     }
     
     return $comp->compile($text);
     }
     
  5. 28. November 2009
    Zuletzt von einem Moderator bearbeitet: 14. April 2017
    AW: BB-Code umsetzen

    hab den compiler noch ein wenig erweitert und wie oben erwähnt nen stack hinzugefügt.

    No File | xup.in

    für das script wird php5.3 benötigt.

    //edit, so wie du das machst wird das nix. mach das am besten so:

    PHP:
    require ...

    class 
    MeinBBCodeParser  extends  lib bbcode Compiler  //wieder backslashes machen ...
    {
        public static 
    $replaceSmilies  true ;

        protected function 
    handleContent ( $text )
        {
            
    $text  parent :: handleContent ( $text );
            if(
    self :: $replaceSmilies  ===  true ) {
                
    $text  str_replace ( ':)' '<img src="../res/imgs/emoticons/smile.png" alt=":)" />' $text );
                
    $text  str_replace ( ':D' '<img src="../res/imgs/emoticons/laugh.png" alt=":D" />' $text );
                
    $text  str_replace ( ';)' '<img src="../res/imgs/emoticons/zwinker.png" alt=";)" />' $text );
                
    $text  str_replace ( ':(' '<img src="../res/imgs/emoticons/unhappy.png" alt=":(" />' $text );
                
    $text  str_replace ( ':P' '<img src="../res/imgs/emoticons/zunge.php" alt=":P" />' $text );
            }

            return 
    $text ;
        }
    }

    function 
    bbcode2html ( $text $smilies ) {
        
    MeinBBCodeParser :: $replaceSmilies  = ( $smilies  ===  true );
        static 
    $comp ;
        if(!(
    $comp  instanceof  MeinBBCodeParser ))
            
    $comp  = new  MeinBBCodeParser ();
        
        return 
    $comp -> compile ( $text );
    }
     
  6. 28. November 2009
    AW: BB-Code umsetzen

    thx für die hilfe

    habe mal gerade zur sicherheit nachgeguck, es läuft PHP 5.2.1 X( Hab mal den Support angeschrieben, dass die mir 5.3 aufspielen sollen^^ Wenn die das machen, werd ich die Klasse wohl ans laufen kriegen
     
  7. 28. November 2009
    Zuletzt von einem Moderator bearbeitet: 14. April 2017
    AW: BB-Code umsetzen

    in der php5.3-version hab ich eben noch schnell nen kleinen bug gefixt, also alle die das runtergeladen ham bitte updaten: No File | xup.in

    und hier ein php4 port: No File | xup.in
    (der sollte mit php5 u.u sogar schneller laufen als die klasse(n), aber psssscht!)

    du kannst für bestimmte tags callbacks definieren:
    PHP:
    require  'bbcode_compiler.php4' ;

    function 
    bbcode_compile_test_tag ( $args $content ) {
        return 
    'was is denn das für ne '  $content ;
    }

    print 
    bbcode_compile ( '[test][b]krasse :poop:[/b][/test]' );
    oder zum einfachen suchen->ersetzen tags hinzufügen:
    PHP:
    //-----------------name------prefix--------------suffix-----------
    bbcode_create_tag ( 'i1337' '<strong>' '</strong> is &uuml;ber!' );
    bbcode_create_tag ( 'size' '<span style="font-size: %dpx;">' '</span>' );

    print 
    bbcode_compile ( '[i1337]Mürdok[/i1337]' );
    -> ggf bbcode_compiler.php4 nochmal von xup laden

    :lol:
     
  8. 30. November 2009
    AW: BB-Code umsetzen

    und funktionierts, kommst klar?

    so garkeine rückmeldung geht garnet ^^
     
  9. 30. November 2009
    AW: BB-Code umsetzen

    joa funktioniert, danke
    sry dass ich so spät zurückschreib^^
     
  10. 30. November 2009
    Zuletzt von einem Moderator bearbeitet: 16. April 2017
    AW: BB-Code umsetzen

    okay, dann bau bitte nen backlink zu rr in deine webseite ein:

    Webmaster / Download - RR:Suche

    :lol:

    war natürlich n scherz
     
  11. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.