Oddio il replace mi sembra una toppa

Devi fare un piccolo controllo che la collation del database sia UTF-8, che le tabelle siano in UTF-8, che l'html sia in UTF-8.

Che il file php sia in UTF-8 e via discorrendo. Il csv potrebbe arrivare da fonti diverse suppongo, quindi non è detto che sia in UTF-8, quindi è corretto che lo normalizzi, ma una volta normalizzato non serve decodificarlo perché se la pagina che vai a visualizzare è in UTF-8 vedrai tutto correttamente.

Un accorgimento che può tornare utile è eseguire subito dopo la connessione al database

codice:
SET NAMES 'utf8'
http://dev.mysql.com/doc/refman/5.0/...onnection.html

Può sembrare strano, ma se si entra nell'ottica che il charset sia univoco per tutte le fonti utilizzate si va via spediti.