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