Il problema delle vocali accentate

Gli argomenti di questa pagina

  • Il problema dei caratteri strani con le vocali accentate
  • Inpostazioni per charset UTF8 Senza BOM e collation utf8_general_ci
  • Per impostare il giusto charset nel DB: collation utf8_general_ci
  • Interfacciamento al database ed impostazione del charset negli script
  • Per controllare e modificare il charset delle pagine: charset UTF8 Senza BOM

Il problema dei caratteri strani con le vocali accentate

Lavorando in PHP e MYSQL, ma anche se non si fa uso di un database, molto spesso ci imbattiamo nel fastidiosissimo problema dell'interpretazione delle vocali accentate e di qualche altro carattere speciale.
Scrivendo delle parole tipo
mikè
città

veniamo a trovarci nella angosciosa situazione di dover leggere, nel browser, qualcosa del genere.

così mikè
cittÃ
o così mik�
città

Inpostazioni per charset UTF8 Senza BOM e collation utf8_general_ci

Questo può succedere perchè non c'è una codifica dei caratteri coerente tra le varie interfacce o elementi che vengono usati:
Pagine PHP, DATABASE, Tabelle, campi.

  • tag nelle pagine: <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />. Questo meta serve solo se la pagina deve mostrare il testo nel browser. Se nella pagina c'è solo uno script php che elabora dati o se è una pagina da includere nella pagina principale, non serve.
  • charset dei file php (tutti i files coinvolti): la codifica deve essere ANSI as UTF8 oppure occorre usare il comando Converti in UTF8 Senza BOM.
  • collation DB: utf8_general_ci (da non confondere con utf8_unicode_ci che è un'altra cosa)
  • charset tabelle: utf8_general_ci
  • charset campi testo: utf8_general_ci
  • Interfacciamento al database tramite script PHP: mysql_set_charset("utf8") che va messo subito dopo la connessione al db e dopo averlo selezionato.

Qui sotto un esempio di script per la connessione al DB specificando il charset da usare per la connessione tra PHP e MySQL.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?php
include ('res/db_login.php');
if (!
$link mysql_connect($Host$User$Password)) {
    echo 
mysql_error() . "<br />\n";
} else {
    if (!
mysql_select_db($DBName)) {
        echo 
mysql_error() . "<br />\n";
    } else {
        
mysql_set_charset("utf8"); 
        
//    esecuzione della Query
        
$result mysql_query($Query);
        if (!
$result) {
            echo 
mysql_error() . "<br />\n";
        } else {
            echo 
"Query eseguita<br />\n";
            
//    qui vengono eseguiti altri eventuali lavori
        
}
    }
}
@
mysql_close ($Link);
?>
quindi i lavori vengono chiusi alla solita maniera
1
2
3
<?php
mysql_close 
($link);
?> 

Per impostare il giusto charset nel DB: collation utf8_general_ci

Per il DB è sufficiente recarsi al proprio pannello di controllo di phpmyadmin per controllare ed eventualmente modificare i charset e le collation dei vari oggetti.
Nel DB ci comportiamo come mostrato dalle immagini che seguono dopo essere entrati nel pannello di controllo di phpmyadmin.

  • Per modificare l'intero DB
  • Per modificare ogni singola tabella
  • Per modificare ogni singolo campo

Interfacciamento al database ed impostazione del charset negli script

Quando ci interfacciamo al DB tramite i nostri script è bene impostare il charset ad UTF8 con l'istruzione:
mysql_set_charset("utf8");
Questa istruzione va inserita all'inizio della connessione al database, subito dopo averlo selezionato con
mysql_select_db($DBName);

Per controllare e modificare il charset delle pagine: charset UTF8 Senza BOM

Non meno importante è la giusta impostazione del charset nelle nostre pagine, siano esse intere (complete di DOCTYPE ed altri tag), siano semplici script da includere nelle pagine.
Per le pagine c'è bisogno di un editor che ci permetta ci controllare ed eventualmente modificare il charset della pagina. Per controllare ed eventualmente modificare il charset nelle pagine, un editor che ci permette di compiere agevolmente queste operazioni potrebbe essere il Notepad++ (programma free e quindi liberamente scaricabile), a prescindere dal proprio editor preferito.

Con questo editor:

  • Apriamo il documento da esaminare ed eventualmente modificare
  • Osserviamo l'angolo inferiore destro dell'editor
  • Se vediamo ANSI as UTF-8 molto probabilmente nel menù Formato possiamo constatare che la pagina è in Codifica in UTF-8 (senza BOM)
  • Se non vediamo ANSI as UTF-8 occorre convertire la pagina scegliendo nel menù Formato la voce Converti in UTF-8 senza BOM
  • Per il tag <meta charset="utf-8"> (la riga completa: <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />)
    • se la pagina è intera e deve mostrare contenuto nel Browser, il tag va inserito nella parte alta della pagina (tra <head> e </head>)
    • se la pagina contiene solo script per elaborare i dati, il tag non va inserito
  • Fatta la modifica salviamo la pagina e possiamo continuare il nostro lavoro col nostro editor preferito.

Questa è la metodica che ho letto nel forum di html.it ed illustrata da Alhazred.

 

 



settore tecnico il sito di lorettabweb il Forum di sostegno
il forum il forum il forum