So che c'e' senz'altro un modo molto piu' elegante e forse con un'espressione regolare ben assestata e molte meno righe di codice avrei potuto ottenere altrettanto, ad ogni modo questa funzione risolve il mio problema:
codice:
function showhtml($txt) {
$trans = get_html_translation_table(HTML_ENTITIES);
$trans['’'] = "'";
$txt = strtr($txt, $trans); //-- Sostituisco tutte le entity nel corrispondente codice HTML
preg_match_all("|(<)[^>][\w]+(>)|U", $txt, $match); //-- prendo tutte le stringhe racchiuse tra tag < .. >
$src = array("<",">",""","'"); //-- ne sostituisco i codici html ...
$dst = array("<",">","\"","'"); //-- ... nel corrispettivo char
$match[2] = str_replace($src, $dst, $match[0]);
$txt = str_replace($match[0], $match[2], $txt); //-- sostituisco le porzioni di stringa originale
$txt = nl2br($txt); //-- converto i ritorni a capo in tag
return($txt);
}
Grazie ancora a span per il suggerimento di partenza 
Ste