Uso la funzione utf8_decode() perchè mi è stata suggerita in passato su questo forum. Senza di questa funzione in effetti, molti caratteri risultano sballati, sia salvandoli nel database sia mostrandoli a video.
Ti riassumo cosa faccio al momento, così magari ti è più semplice aiutarmi.
Il testo inserito nella form da un utente viene inviato ad una pagina che lo tratta con la funzione
codice:
function correggi_testo($testo)
{
$testo_temporaneo=$testo;
$testo_temporaneo=str_replace("’","'",$testo_temporaneo);
$testo_temporaneo=str_replace("‘","'",$testo_temporaneo);
$testo_temporaneo=str_replace("`","'",$testo_temporaneo);
$testo_temporaneo=utf8_decode($testo_temporaneo);
$testo_temporaneo=mysql_escape_string($testo_temporaneo);
return $testo_temporaneo;
}
e salvato nel database.
La pagine che mostrerà il testo legge il campo dal database e lo tratta con la funzione
codice:
function formatta($testo)
{
$testo_temporaneo=$testo;
$testo_temporaneo=stripslashes(nl2br(htmlentities($testo_temporaneo)));
return $testo_temporaneo;
}
Puoi salvare del testo utf-8 anche se il db è impostato come latin1, i problemi sono minimi (nell'ordinamento in presenza di caratteri speciali, ma è una cosa marginale confrontata ai vantaggi, secondo me).
Magari dovrei cambiare la codifica del database? Però il problema non è legato solo al salvataggio, è lo stesso anche nella stampa a video...