Memorizzare i dati di un form in MySQL con PHP e codifica UTF-8 | Ing. Eugenio Bonifacio
Tags: applicazioni sms, applicazioni web, cataloghi elettronici, commercio elettronico, consulenza agenzie web, consulenza opensource, consulenza oscommerce, consulenza Drupal, consulenza Wordpress, consulenza Zend Framework, e-commerce, portali web, sistemi di prenotazione, sistemi informativi, siti web comiso, siti web ragusa, siti web sicilia, software personalizzati, sviluppo firmware, programmatore php freelance, sviluppatore zend framework, sviluppatore doctrine, programmatore zend framework, programmatore doctrine, sviluppatore cakephp
6
Lug 10

Memorizzare i dati di un form in MySQL con PHP e codifica UTF-8

 

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:

  1. Specificare sempre la codifica utilizzata nell'HEAD HTML delle pagine interessate, ovviamente dovrà essere "utf-8".
  2. 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.
  3. Utilizzare il collation "utf8_generic_ci" per il database, le tabelle ed i campi.
  4. 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'