E' sbagliato l'approccio. Non puoi usare htmlentities(). Devi PRIMA predisporre il database e i tuoi file per lavorare in UTF-8 e POI occuparti delle entità di carattere (e SOLO di quelle codificate da htmlspecialchars()).

Quindi:

1. Il database, le singole tabelle e i singoli campi di testo delle tabelle (CHAR, VARCHAR, TEXT, ecc.) vanno creati con CHARACTER SET utf8 e COLLATE utf8_general_ci.

2. I tuoi file (XHTML, PHP, ASP, o altro) vanno salvati con la codifica UTF-8 SENZA BOM (Byte Order Mark che causa problemi a molti browser). Se non salvi il file con questa codifica, la cosa non potrà funzionare!

3. In tutte le tue pagine va inserito il meta tag che specifica il character set usato: <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />.

I dati vanno inseriti così come sono nel database, senza codificarli con funzioni PHP. Quando li leggi invece (per popolare i campi del form o visualizzarli nelle pagine) devi usare htmlspecialchars($dato,ENT_NOQUOTES,'UTF-8') (se il dato viene visualizzato in un campo di form, al posto di ENT_NOQUOTES usa ENT_COMPAT).