io ti darei come consiglio quello di invertire la prospettiva di approccio del problema e ragionare con i tag consentiti ed impiegare strip_tags che ti elimina tutto il testo

Codice PHP:
<?php
$tag_consentiti 
'

<font><h1><h2><h3><a>[b][b]<u>[i]<table><tr><td><tbody>'


$nuovo_testo_filtrato strip_tags($testo_proveniente_da_TYNIMCE$tag_consentiti);
?>
se invece ci tieni a eliminare solo i tag che ritieni indesiderati ho trovato su php.net (dove si trova tutto!!!) questa funzione
Codice PHP:
<?php 
function strip_only($str$tags$stripContent false) { 
    
$content ''
    if(!
is_array($tags)) { 
        
$tags = (strpos($str'>') !== false explode('>'str_replace('<'''$tags)) : array($tags)); 
        if(
end($tags) == ''array_pop($tags); 
    } 
    foreach(
$tags as $tag) { 
        if (
$stripContent
             
$content '(.+</'.$tag.'[^>]*>|)'
         
$str preg_replace('#</?'.$tag.'[^>]*>'.$content.'#is'''$str); 
    } 
    return 
$str


$str '<font color="red">red</font> text'
$tags 'font'
$a strip_only($str$tags); // red text 
$b strip_only($str$tagstrue); // text 
?>