Malte: Zuviele Zeilenumbrüche...

Hi,

ich bin ja dabei ein Forum zu programmieren und habe jetzt einen Fehler festgestellt.

Wenn ich einen Code postet in meinem Forum mit dem Befehle [ php] [ /php] werden immer zuviele <br> eingefügt und ich weiß nicht warum:

<?php  
function bbcode ($bbcode)  
{  
  
$bbcode=preg_replace("/\[b\](.*?)\[\/b\]/si", "<b>\\1</b>", $bbcode);  
$bbcode=preg_replace("/\[i\](.*?)\[\/i\]/si", "<i>\\1</i>", $bbcode);  
$bbcode=preg_replace("/\[s\](.*?)\[\/s\]/si", "<s>\\1</s>", $bbcode);  
$bbcode=preg_replace("/\[u\](.*?)\[\/u\]/si", "<u>\\1</u>", $bbcode);  
$bbcode=preg_replace("/\[center\](.*?)\[\/center\]/si", "<center>\\1</center>", $bbcode);  
$bbcode=preg_replace("/\[url\](.*?)\[\/url\]/si", "<a href=\\1>\\1</a>", $bbcode);  
$bbcode=preg_replace("/\[code\](.*?)\[\/code\]/si", "<center><b>Code:</b><br><br><div style=\"text-align:left;border:1px solid black;font-size:11px;color:green;background-color:#ececec;width:500px;padding:5px;\"><i>\\1</i></div></center><br>", $bbcode);  
$bbcode=preg_replace("/\[img\](.*?)\[\/img\]/si", "<img src=\\1 border=\"0\">", $bbcode);  
  
$bbcode = nl2br ($bbcode);  
  
return $bbcode;  
}  
  
function php ($php)  
{  
  
  while((strpos($php,'[php]')!=false) && (strpos($php,'[/php]')!= false))  
  {  
    $startpos=strpos($php,'[php]')+5;  
    $endpos=strpos($php,'[/php]',$startpos);  
    $phpcode=substr($php,$startpos,$endpos-$startpos);  
    $codestring='[php]'.$phpcode.'[/php]';  
    $formattedcode=highlight_string($phpcode,true);  
    $php=str_replace($codestring,$formattedcode,$php);  
  }  
  
  return $php;  
}  
?>  

Und hier meine Ausgabe funktion:

  
<?php  
include_once("function/function/bbcodes.php");  
$beitrag[$i] = php ( $beitrag[$i] );  
$beitrag[$i] = bbcode ( $beitrag[$i] );  
  
include_once("function/function/smilies.php");  
$beitrag[$i] = smilies ( $beitrag[$i] );  
  
<td bgcolor='.$bgcolor.' style="vertical-align:top;border: 1px solid black;padding-left:5px;font-weight:normal" >  
'.stripslashes($beitrag[$i]).'  
</td>  
?>  

Könnt ihr mir helfen den Fehler zu finden und ihn unschädlich machen?
Danke

  1. Moin moin!

    Das Problem ist die Formatierung von highlight_syntax(), das hängt nämlich an jede Codezeile ein Newline _und_ ein Break an. Und wenn du dann mit nl2br() die Newlines durch Breaks ersetzt, hast du zwei Breaks hintereinander.

    Ein Möglicher Workaround ist

    $formattedcode=highlight_string($phpcode,true);

    durch

    $formattedcode=str_replace("<br />", "",highlight_string($phpcode,true));

    zu ersetzen.

    Hoffe, das hilft dir weiter.

    ciao,
    hofi

    1. Danke,

      das war das Problem.
      Danke

    2. Hi hofi,

      Das Problem ist die Formatierung von highlight_syntax(), das hängt nämlich an jede Codezeile ein Newline _und_ ein Break an. Und wenn du dann mit nl2br() die Newlines durch Breaks ersetzt, hast du zwei Breaks hintereinander.

      Ein Möglicher Workaround ist [...]

      ... einfach das nl2br() wegzulassen?

      Viele Grüße aus Freiburg,
      Marian

      1. Moin moin!

        Ein Möglicher Workaround ist [...]

        ... einfach das nl2br() wegzulassen?

        Nun, vermessen wie ich nun einmal bin, ging ich davon aus, dass er das nl2br() da schon haben wollte, da läuft immerhin der gesamte Textdurch, nicht nur die Teile mit PHP-Code. Deshalb erschien es mir sinnvoller, das doppelte Break aus dem PHP-Code zu entfernen als den PHP-Code per RegEx vom restlichen Text zu trennen und für diesen separat nl2br() auszuführen.

        ciao,
        hofi

        1. Hi hofi,

          Ein Möglicher Workaround ist [...]

          ... einfach das nl2br() wegzulassen?

          Nun, vermessen wie ich nun einmal bin, ging ich davon aus, dass er das nl2br() da schon haben wollte, da läuft immerhin der gesamte Textdurch, nicht nur die Teile mit PHP-Code.

          Ja stimmt, da hab ich garnicht dran gedacht.

          Deshalb erschien es mir sinnvoller, das doppelte Break aus dem PHP-Code zu entfernen als den PHP-Code per RegEx vom restlichen Text zu trennen und für diesen separat nl2br() auszuführen.

          Das wär aber auch recht mühsam.

          Viele Grüße aus Freiburg,
          Marian