Tu hai la stringa $row['testo'], con la prima riga istanzi l'ugualianza

$testo = $row['testo'];

ora, se fai dei replace successivi devi per forza utilizzare la stessa variabile, altrimenti PHP usera' l'ultimo valore.

se fai

$testo = $row['testo'];
$testo = str_replace("[ i ]", "", $testo);
$testo = str_replace("[ /i ]", "
", $testo);
$testo = str_replace("[ b ]", "", $testo);
$testo = str_replace("[ /b ]", "
", $testo);

fai meno confuzione