Il problema è sicuramente nella gestione del charset del DB.
Io fossi in te, farei uno script che mi preleva i dati e mi permette di sostituirli con i relativi caratteri xml friendly:
Codice PHP:
$stringa = str_replace("°", "°", $stringa);
$stringa = str_replace("&", "&", $stringa);
$stringa = str_replace("\"", ""e;", $stringa);
$stringa = str_replace("\'", "'", $stringa);
$stringa = str_replace("è", "è", $stringa);
// eccetera
IN questo modo, nel DB metti solo caratteri accettati in qualsiasi charset, in estrapolazione non hai necessità di trasformarli in caratteri leggibili, e ci guadagni pure se il tuo sito è in XHTML.... almeno sai che non hai problemi di validazione di codice.