Io ho avuto lo stesso problema e ti riassumo in passi come ho risolto:
La codica iniziale del mio testo è ISO8859-1, il DB memorizza in UTF-8, c'è bisogno quindi di una conversione tra caratteri.
Passo 1: Trovo tutti i caratteri non compatibili con UTF8 nel testo iniziale e li sostituisco con le relative codiche "html entities"
Codice PHP:
es: società ->società
Passo 2: Rimuovo dalla stringa (con una operazione di pulitura) tutti i caratteri che non rientrano nella codifica UTF-8 con la seguente funzione:
Codice PHP:
function cleanNotInUtf8String($s)
{
if(empty($s)) return $s;
$s = preg_match_all("#[\x09\x0A\x0D\x20-\x7E]|
[\xC2-\xDF][\x80-\xBF]|
\xE0[\xA0-\xBF][\x80-\xBF]|
[\xE1-\xEC\xEE\xEF][\x80-\xBF]{2}|
\xED[\x80-\x9F][\x80-\xBF]#x", $s, $m );
return implode("",$m[0]);
}
Spero di esserti stato utile,
Saluti,
Vincenzo