BBcodes

newwarrior

Erfahrenes Mitglied
Hi,

ich bin dabei gerade meine eigenen BBcodes zu schreiben. Das klappt auch alles. Jetzt habe ich nur noch bei zwei Sachen Probleme. Einmal, will ich es mit dem Link machen, also das mit dem ]url] und dann wenn es in php tags steht ]php] das es highlight gesetzt wird. nur wie kann ich das machen, hier mal meien bbcodes:
PHP:
<?php

$bb_codes = array(
   
  '[ b ]' => '<span style="font-weight:bold">',
  '[ /b ]' => '</span>',
    
  '[ i ]' => '<span style="font-style:italic">',
  '[ /i ]' => '</span>',
    
  '[ u ]' => '<span style="text-decoration:underline">',
  '[ /u ]' => '</span>',
  
  '[ cod ]' => '<td class="code"><span style="color:#445270;font-size:12px">',
  '[ /cod ]' => '</span></td>'
  );

?>
 
:suchen: Das hatten wir schon zigmal. Wenn du nach highlight im Forum suchst, findest du auch eine Menge.

mb fanste
 
aber da finde ich nicht das, was ich dazu verwenden kann, kann mir das nicht einer sagen, vielleicht das schon mal mit dem Url
 
PHP:
<?php
   function highlight_code($code, $inline=false, $return=false) // Pre php 4 support for capturing highlight
   {
       (string) $highlight = "";
       if ( version_compare(PHP_VERSION, "4.2.0", "<") === 1 )
       {
           ob_start(); // start output buffering to capture contents of highlight
           highlight_string($code);
           $highlight = ob_get_contents(); // capture output
           ob_end_clean(); // clear buffer cleanly
       }
       else
       {
           $highlight=highlight_string($code, true);
       }
      
       # Using preg_replace will allow PHP 4 in on the fun
       if ( $inline === true )
           $highlight=preg_replace("/<code>/i","<code class=\"inline\">",$highlight);
       else
           $highlight=preg_replace("/<code>/i","<code class=\"block\">",$highlight);           
      
       if ( $return === true )
       {
           return $highlight;
       }
       else
       {
           echo $highlight;
       }
   }
?>

alles klar die soll auch Funktionieren, aber wo muss ich meine Variable $message hinpacken damit sie gecodet wird und auch nur dann gecodet wenn im text das steht
PHP:
 
Ich denke innerhalb von $message werden ggf. verschiedene bbCodes auftauchen.
Dann uebergibst Du am besten $message an eine Parser-Funktion, wie ich im 2. verlinkten Thread gezeigt habe und gibst dann den Rueckgabe-Wert der Funktion aus. Innerhalb der Funktion werden alle bbCodes durch HTML-Codes ersetzt, zusaetzlich kann dort natuerlich noch highlighting fuer Source-Code eingebaut werden.
Das funktioniert aehnlich wie der Rest. Du holst Dir den Text zwischen den Tags, highlightest den per highlight_string() und packst das Ergebnis mit in den Ausgabestring.
 
das mit dem Auftrufen und so klappt alles, aber wie kann ich den hightlighttext da unterbringen, das verstehe ich immer noch nicht ganz also ich habe jetzt den anderen bbcode:

PHP:
<?php
function replacetags($messagetext)
{
while ((strpos($messagetext,"[url=")>-1) && (strpos($messagetext,"[ /url ]")>-1))
    {
        $startpos=strpos($messagetext,"[url=")+5;
        $endpos=strpos($messagetext,"]",$startpos);
        $url=substr($messagetext,$startpos,$endpos-$startpos);
        $startpos=$endpos+1;
        $endpos=strpos($messagetext,"[ /url ]",$startpos);
        $urltext=substr($messagetext,$startpos,$endpos-$startpos);
        $codestring='[url='.$url.']'.$urltext.'[ /url ]';
        $textstring='<a href="'.$url.'">'.$urltext.'</a>';
        $messagetext=str_replace($codestring,$textstring,$messagetext);
    }
while ((strpos($messagetext,"[color=")>-1) && (strpos($messagetext,"[ /color ]")>-1))
    {
        $startpos=strpos($messagetext,"[color=")+7;
        $endpos=strpos($messagetext,"]",$startpos);
        $color=substr($messagetext,$startpos,$endpos-$startpos);
        $startpos=$endpos+1;
        $endpos=strpos($messagetext,"[ /color ]",$startpos);
        $colortext=substr($messagetext,$startpos,$endpos-$startpos);
        $codestring='[color='.$color.']'.$colortext.'[ /color ]';
        $textstring='<font color="'.$color.'">'.$colortext.'</font>';
        $messagetext=str_replace($codestring,$textstring,$messagetext);
    }
while ((strpos($messagetext,"[ b ]")>-1) && (strpos($messagetext,"[ /b ]")>-1))
    {
        $startpos=strpos($messagetext,"[ b ]")+3;
        $endpos=strpos($messagetext,"[ /b ]",$startpos);
        $text=substr($messagetext,$startpos,$endpos-$startpos);
        $codestring='[ b ]'.$text.'[ /b ]';
        $textstring='<b>'.$text.'</b>';
        $messagetext=str_replace($codestring,$textstring,$messagetext);
    }
while ((strpos($messagetext,"[ i ]")>-1) && (strpos($messagetext,"[ /i ]")>-1))
    {
        $startpos=strpos($messagetext,"[ i ]")+3;
        $endpos=strpos($messagetext,"[ /i ]",$startpos);
        $text=substr($messagetext,$startpos,$endpos-$startpos);
        $codestring='[ i ]'.$text.'[ /i ]';
        $textstring='<i>'.$text.'</i>';
        $messagetext=str_replace($codestring,$textstring,$messagetext);
    }
while ((strpos($messagetext,"[ u ]")>-1) && (strpos($messagetext,"[ /u ]")>-1))
    {
        $startpos=strpos($messagetext,"[ u ]")+3;
        $endpos=strpos($messagetext,"[ /u ]",$startpos);
        $text=substr($messagetext,$startpos,$endpos-$startpos);
        $codestring='[ u ]'.$text.'[ /u ]';
        $textstring='<u>'.$text.'</u>';
        $messagetext=str_replace($codestring,$textstring,$messagetext);
    }
while ((strpos($messagetext,"[ s ]")>-1) && (strpos($messagetext,"[ /s ]")>-1))
    {
        $startpos=strpos($messagetext,"[ s ]")+3;
        $endpos=strpos($messagetext,"[ /s ]",$startpos);
        $text=substr($messagetext,$startpos,$endpos-$startpos);
        $codestring='[ s ]'.$text.'[ /s ]';
        $textstring='<s>'.$text.'</s>';
        $messagetext=str_replace($codestring,$textstring,$messagetext);
    }
return $messagetext;
}
}
?>

und hier der highlight
PHP:
<?php
   function highlight_code($code, $inline=false, $return=false) // Pre php 4 support for capturing highlight
   {
       (string) $highlight = "";
       if ( version_compare(PHP_VERSION, "4.2.0", "<") === 1 )
       {
           ob_start(); // start output buffering to capture contents of highlight
           highlight_string($code);
           $highlight = ob_get_contents(); // capture output
           ob_end_clean(); // clear buffer cleanly
       }
       else
       {
           $highlight=highlight_string($code, true);
       }
      
       # Using preg_replace will allow PHP 4 in on the fun
       if ( $inline === true )
           $highlight=preg_replace("/<code>/i","<code class=\"inline\">",$highlight);
       else
           $highlight=preg_replace("/<code>/i","<code class=\"block\">",$highlight);           
      
       if ( $return === true )
       {
           return $highlight;
       }
       else
       {
           echo $highlight;
       }
   }
?>

nur wie bringe ich jetzt beides zusammen und das beide auch wirklich den messagetext verwerten?
 
Ich hab mal die Geschichte mit dem [ php ]-Tag hinzugefuegt.
Sollte eigentlich gehen.
Du musst halt noch die Leerzeichen bei [ php ] und [ /php ] entfernen.
Das musste ich so machen da die Anzeige hier im Forum sonst zerwurstet wird.
PHP:
<?php
function replacetags($messagetext)
{
while ((strpos($messagetext,"[url=")>-1) && (strpos($messagetext,"[ /url ]")>-1))
 {
  $startpos=strpos($messagetext,"[url=")+5;
  $endpos=strpos($messagetext,"]",$startpos);
  $url=substr($messagetext,$startpos,$endpos-$startpos);
  $startpos=$endpos+1;
  $endpos=strpos($messagetext,"[ /url ]",$startpos);
  $urltext=substr($messagetext,$startpos,$endpos-$startpos);
  $codestring='[url='.$url.']'.$urltext.'[ /url ]';
  $textstring='<a href="'.$url.'">'.$urltext.'</a>';
  $messagetext=str_replace($codestring,$textstring,$messagetext);
 }
while ((strpos($messagetext,"[color=")>-1) && (strpos($messagetext,"[ /color ]")>-1))
 {
  $startpos=strpos($messagetext,"[color=")+7;
  $endpos=strpos($messagetext,"]",$startpos);
  $color=substr($messagetext,$startpos,$endpos-$startpos);
  $startpos=$endpos+1;
  $endpos=strpos($messagetext,"[ /color ]",$startpos);
  $colortext=substr($messagetext,$startpos,$endpos-$startpos);
  $codestring='[color='.$color.']'.$colortext.'[ /color ]';
  $textstring='<font color="'.$color.'">'.$colortext.'</font>';
  $messagetext=str_replace($codestring,$textstring,$messagetext);
 }
while ((strpos($messagetext,"[ b ]")>-1) && (strpos($messagetext,"[ /b ]")>-1))
 {
  $startpos=strpos($messagetext,"[ b ]")+3;
  $endpos=strpos($messagetext,"[ /b ]",$startpos);
  $text=substr($messagetext,$startpos,$endpos-$startpos);
  $codestring='[ b ]'.$text.'[ /b ]';
  $textstring='<b>'.$text.'</b>';
  $messagetext=str_replace($codestring,$textstring,$messagetext);
 }
while ((strpos($messagetext,"[ i ]")>-1) && (strpos($messagetext,"[ /i ]")>-1))
 {
  $startpos=strpos($messagetext,"[ i ]")+3;
  $endpos=strpos($messagetext,"[ /i ]",$startpos);
  $text=substr($messagetext,$startpos,$endpos-$startpos);
  $codestring='[ i ]'.$text.'[ /i ]';
  $textstring='<i>'.$text.'</i>';
  $messagetext=str_replace($codestring,$textstring,$messagetext);
 }
while ((strpos($messagetext,"[ u ]")>-1) && (strpos($messagetext,"[ /u ]")>-1))
 {
  $startpos=strpos($messagetext,"[ u ]")+3;
  $endpos=strpos($messagetext,"[ /u ]",$startpos);
  $text=substr($messagetext,$startpos,$endpos-$startpos);
  $codestring='[ u ]'.$text.'[ /u ]';
  $textstring='<u>'.$text.'</u>';
  $messagetext=str_replace($codestring,$textstring,$messagetext);
 }
while ((strpos($messagetext,"[ s ]")>-1) && (strpos($messagetext,"[ /s ]")>-1))
 {
  $startpos=strpos($messagetext,"[ s ]")+3;
  $endpos=strpos($messagetext,"[ /s ]",$startpos);
  $text=substr($messagetext,$startpos,$endpos-$startpos);
  $codestring='[ s ]'.$text.'[ /s ]';
  $textstring='<s>'.$text.'</s>';
  $messagetext=str_replace($codestring,$textstring,$messagetext);
 }
while ((strpos($messagetext,"[ php ]")>-1) && (strpos($messagetext,"[ /php ]")>-1))
 {
  $startpos=strpos($messagetext,"[ php ]")+5;
  $endpos=strpos($messagetext,"[ /php ]",$startpos);
  $text=substr($messagetext,$startpos,$endpos-$startpos);
  $codestring='[ php ]'.$text.'[ /php ]';
  ob_start();
  highlight_string($text);
  $textstring=ob_get_contents();
  ob_end_clean();
  $messagetext=str_replace($codestring,$textstring,$messagetext);
 }
return $messagetext;
}
?>
 
Zuletzt bearbeitet:
Zurück