ipotizzando di utilizzare una semplice funzione così per i bbcode

Codice PHP:
function bbcode($testo) {

        
$bb_prima = array(
        
'/\[b\](.*?)\[\/b\]/is',
        
'/\[i\](.*?)\[\/i\]/is',
        
'/\[u\](.*?)\[\/u\]/is',
        
'/\[img\](.*?)\[\/img\]/is',
        
'/\[url\](.*?)\[\/url\]/is',
        
'/\[url\=(.*?)\](.*?)\[\/url\]/is'
        
);

        
$bb_dopo = array(
        
'[b]$1[/b]',
        
'[i]$1[/i]',
        
'<u>$1</u>',
        
'[img]$1[/img]',
        
'[url="$1"]$1[/url]',
        
'[url="$1"]$2[/url]'
        
);

        
$testo nl2br(preg_replace($bb_prima$bb_dopo$testo));

        return 
$testo;

    } 
ho la necessità di tagliare un determinato testo a TOT caratteri.

la soluzione potrebbe essere:

-elimino completamente i bbcode dal testo, e conto i caratteri

però io voglio che funzioni in un'altro modo.

io voglio contare solo i caratteri (non il bbcode all'interno del testo) ma poi far funzionare il bbcode all'interno del testo tagliato, come posso fare?