Lavorare con la codifica UTF-8 e ritrovarsi ad avere problemi può essere molto frustrante, trattandosi di qualcosa di cui non possiamo facilmente eseguire un debug. Se siete nella situazione di dover memorizzare in MySQL i dati provenienti da un form attraverso PHP e utilizzando la codifica UTF-8, questa piccola guida vi dovrebbe aiutare.
Spesso il problema principale è quello di individuare il motivo per cui nel db i dati non vengono memorizzati correttamente. Ma andiamo con ordine, di seguito una checklist delle cose da fare:
- Specificare sempre la codifica utilizzata nell'HEAD HTML delle pagine interessate, ovviamente dovrà essere "utf-8".
- Accertarsi che la codifica dei file sia utf-8. Se il vostro IDE non vi permette di verificarlo scaricate Notepad++ vi permetterà di giocare facilmente con le conversioni.
- Utilizzare il collation "utf8_generic_ci" per il database, le tabelle ed i campi.
- Settare il charset della connessione mysql.
Il primo punto lo si risolve facilmente mettendo un tag META come primo tag all'interno dell'HEAD della pagina:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
Il secondo consiste nell'impostare la codifica utilizzata per il file che contiene il sorgente, quindi il charset del file. Se il nostro IDE non ci permette di verificarlo o di modificarlo, Eclipse ce lo permette ad esempio, basta scaricare ed installare Notepad++. Grazie a questo programma, un notepad molto utile, oltre a tante altre cose, potrete divertirvi a convertire le codifiche dei vostri file, selezioniamo "Converti in UTF-8 senza BOM" dal menu "Formato".
Terza cosa, utilizzare il collation "utf8_generic_ci", per il database, le tabelle ed i campi. In questo modo memorizzeremo il testo come utf-8 senza distinzione tra maiuscole e minuscole (ci = case insensitive). Ovviamente quando andremo a comporre le nostre query queste dovranno essere testo UTF-8, così come i campi che andremo a concatenare nella stringa della query. Quindi il DB in ingresso si aspetterà stringhe UTF-8 e in uscita produrrà stringhe in UTF-8.
Infine l'ultima cosa sarà quella di impostare la codifica della connessione, cosa non scontata e soprattutto non di facile individuazione quando si tratta di risolvere i problemi di visualizzazione del testo in UTF-8. Con PHP lo facciamo nel seguente modo:
// apriamo una connessione al database mysql_connect('server', 'utente', 'password'); // impostiamo la codifica della connessione mysql_set_charset('utf8'); // attenzione è 'utf8' NON 'utf-8'
Se utilizziamo Doctrine possiamo impostare la connessione così:
$conn = Doctrine_Manager::connection(); $conn->setCharset('utf8');
Se invece utilizziamo altri linguaggi che non hanno la funzione specifica possiamo semplicemente impostarla attraverso la query:
SET NAMES 'utf8'




Grazie per questa miniguida è
Grazie per questa miniguida è stata davvero utile.
Mario
Lieto di averti aiutato :-)
Lieto di averti aiutato :-)
Invia nuovo commento