nl2br geht mit bbcodes nicht

Slain

Grünschnabel
Abend,
Ich bin eigentlich nicht so der typ der gerne nachfragt aber nach 2 tagen googeln hab ich auch die nase voll.
Undzwar hab ich folgendes Problem

Ich habe n Newssystem erstellt geht auch alles einwandfrei
aber wenn ich nl2br und bbcodes zusammen einsetze gehen die zeilenumbrüche nicht.
benutze ich aber nl2br ohne bb codes gehen die zeilenumbrüche einwandfrei.
Nur ich würde gerne beides zusammen benutzen.

er schreibt mir dann die <br /> einfach hin aber benutzt sie nicht.

die anzeige für die news
PHP:
<?php   echo System::parse_bbcode(nl2br($row[2])); ?>


und die bb code funktion
PHP:
function parse_bbcode($str)
{
  # HTML Zeichen maskieren
  $str = htmlentities($str);

  # Smilies
  $str = str_replace(':)', '<img src="smile.gif" />', $str);
  $str = str_replace(':lol:', '<img src="lol.gif" />', $str);
  $str = str_replace(':cool:', '<img src="cool.gif" />', $str);
  $str = str_replace(':thumb:', '<img src="mr_green.gif" />', $str);
  $str = str_replace(':eek:', '<img src="eek.gif" />', $str);

  # Formatierungen
  $str = preg_replace('#\[b\](.*)\[/b\]#isU', "<b>$1</b>", $str);
  $str = preg_replace('#\[i\](.*)\[/i\]#isU', "<i>$1</i>", $str);
  $str = preg_replace('#\[u\](.*)\[/u\]#isU', "<u>$1</u>", $str);
  $str = preg_replace('#\[color=(.*)\](.*)\[/color\]#isU', "<span style=\"color: $1\">$2</span>", $str);
  $str = preg_replace('#\[size=(8|10|12)\](.*)\[/size\]#isU', "<span style=\"font-size: $1 pt\">$2</span>", $str);

  # Links
  $str = preg_replace('#\[url\](.*)\[/url\]#isU', "<a href=\"$1\">$1</a>", $str);
  $str = preg_replace('#\[ url=(.*)\](.*)\[/url\]#isU', "<a href=\"$1\">$2</a>", $str);

  # Grafiken
  $str = preg_replace('#\[img\](.*)\[/img\]#isU', "<img src=\"$1\" alt=\"$1\" />", $str);

  # Zitate
  $str = preg_replace('#\[quote\](.*)\[/quote\]#isU', "<div class=\"zitat\">$1</div>", $str);
  
  # Quelltext
  $str = preg_replace('#\[code\](.*)\[/code\]#isU', "<div class=\"code\">$1</div>", $str);

  # Listen
  $str = preg_replace('#\[list\](.*)\[/list\]#isU', "<ul>$1</ul>", $str);
  $str = preg_replace('#\[list=(1|a)\](.*)\[/list\]#isU', "<ol type=\"$1\">$2</ol>", $str);
  $str = preg_replace("#\[*\](.*)\\r\\n#U", "<li>$1</li>", $str);
  
  return $str;
}

so puckt er es dann aus
PHP:
wasn scheiss<br /> altah<br /> kotzen
 
Dieses Newssytem, kommen da alle Inhalte aus vertrauenswürdiger Quelle(von dir)?
Falls nicht darfst du die Zeile nicht einfach löschen, sie verhindert schliesslich dass eingegebenes HTML-Markup als solches interpretiert wird.
Böse Menschen würden das ausnutzen und dir sofort ein XSS-Ei ins Nest legen.

Code:
$str = nl2br(htmlentities($str));
und der Funktion nur $row[2] übergeben, und alles sollte prima hinhauen.
 
Zuletzt bearbeitet:
die kommen alle von mir
gehts wenn ich in der anzeige des so mache?
PHP:
<?php echo System::parse_bbcode(nl2br(htmlentities($row[2])));?>
 
Zurück