È importantissimo filtrare l'html (altrimenti, in breve tempo, qualcuno inietterà codice potenzialmente dannoso).
Per farlo puoi usare htmlspecialchars o htmlentities (leggi e decidi in base alle tue esigenze).
Per i bbcode puoi usare str_replace ad esempio (copia incollato da rapida ricerca su google):
Codice PHP:
// [b] and [/b] for bolding text.
$text = str_replace("[b]", '<b>', $text);
$text = str_replace("[/b]", '</b>', $text);
// [u] and [/u] for underlining text.
$text = str_replace("[u]", '<u>', $text);
$text = str_replace("[/u]", '</u>', $text);
// [i] and [/i] for italicizing text.
$text = str_replace("[i]", '<i>', $text);
$text = str_replace("[/i]", '</i>', $text);
// colours
$text = preg_replace("/\[color=(\#[0-9A-F]{6}|[a-z]+)\]/", '<span style="color:$1">', $text);
$text = str_replace("[/color]", '</span>', $text);