Tutto quello che vedi come &blabla; non è utf8.
E' un metodo alternativo per rappresentare i caratteri chiamato "html entities".
L'utf8 è una codifica, quindi non ha bisogno di simboli strani per indicare caratteri.
I db gestiscono senza problemi utf8.
Da una pagina in utf8 riceverai dai form dati già codificati in utf8, quindi purtroppo la soluzione del buffer non è appropriata (ho verificato di persona) perche quando vai in output codifichi in utf8 dati che sono già utf8 e ne esce un casino.
utf8_encode infatti si aspetta come argomento una stringa in ISO-8859-1.
Se tu gli passi qualcosa già in utf8 non se ne cura e lo ricodifica con risultati imprevisti.

Quindi ti consiglio di impostare utf8 sulla pagina con gli appositi tag html, salvare la pagina stessa in utf-8 (molti editor consentono di farlo) e non dovrai curarti del resto poichè quello che ricevi dai form sarà già utf8 e quando lo prelevi dal db sarà ancora utf8.
La pagina l'hai codificata tu con l'editor in utf8 quindi fila tutto liscio.