1000 FAQ, 500 tutorial e video esplicativi. Qui ci sono delle soluzioni!
Risolvere un problema di codifica delle pagine
Questa guida è per voi se riscontrate problemi di codifica delle pagine e caratteri anomali che appaiono sulle vostre pagine.
Codifica universale
Se riscontri problemi di codifica delle pagine, è importante verificare che la codifica della pagina sia impostata correttamente su UTF-8. UTF-8 è una codifica universale che supporta la maggior parte dei caratteri utilizzati nel mondo. Può capitare che alcuni file contengano caratteri incompatibili con la codifica UTF-8. In tal caso, è necessario convertirli in UTF-8 utilizzando un editor di testo appropriato.
Se la codifica della pagina HTML è, ad esempio, in UTF-8 mentre il database è in latin-1, gli accenti non verranno interpretati correttamente da MySQL. Se le pagine contengono caratteri speciali (testi arabi, cinesi, accenti) potrebbero apparire correttamente sul tuo sito web ma non in phpMyAdmin, o viceversa...
Utilizzare un editor di testo in grado di salvare i file in UTF-8. Se importate file di testo con codice SQL al loro interno, è necessario modificarli con un software che salva in UTF-8.
UTF-8 in PHP
Per forzare gli header del sito in UTF-8 utilizzando PHP, è possibile utilizzare la funzione header()
con il parametro Content-Type
. Ecco un esempio di codice che consente di forzare la codifica dei caratteri in UTF-8:
<?php
header('Content-Type: text/html; charset=utf-8');
?>
UTF-8 tramite .htaccess
Per forzare la codifica dei caratteri in UTF-8 tramite il file .htaccess del tuo sito, per il contenuto HTML aggiungi:
AddDefaultCharset utf-8
Header set Content-Type "text/html; charset=utf-8"
e per il contenuto PHP aggiungere:
php_value default_charset UTF-8
php_value mbstring.internal_encoding UTF-8
UTF-8 in HTML
Per specificare la codifica dei caratteri in UTF-8 nel codice HTML, è possibile utilizzare il tag meta charset
:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Titre de la page</title>
</head>
<body>
<!-- Contenu de la page -->
</body>
</html>
Assicurati anche che tutti i file utilizzati sul tuo sito web, come i file di stile CSS e gli script JavaScript, siano codificati in UTF-8. Questo garantisce che tutti i caratteri sul tuo sito web verranno visualizzati correttamente.
UTF-8 nel database
Per (ri)declarare l'encodifica delle basi di dati e delle tabelle in UTF-8 in phpMyAdmin, è possibile seguire i passaggi seguenti:
- Accedi al tuo pannello di controllo phpMyAdmin.
- Fai clic sulla scheda "Operazioni" in alto.
- Nella sezione "Opzioni della tabella", cercate la riga "Collation" e cliccate sul pulsante a discesa.
- Seleziona un'opzione di collazione che utilizza la codifica UTF-8, ad esempio
utf8_general_ci
. - Fai clic sul pulsante "Esegui" in fondo alla pagina per salvare le modifiche.
Aggiungi la funzione PHP mysql_set_charset
alla connessione creata da mysql_connect per determinare la codifica di questa connessione (se non la specifichi, il valore predefinito di questo parametro può variare da un server all'altro):
$connection = mysql_connect($server, $username, $password);
mysql_set_charset('utf8', $connection);
È possibile modificare questo parametro predefinito su tutto il tuo hosting seguendo questa documentazione.
Una volta stabilita la connessione MySQL da uno script PHP, è possibile specificare il tipo di charset UTF8 con questi comandi:
mysql_query("SET NAMES 'utf8';");
mysql_query("SET CHARACTER SET 'utf8';");
Accenti / Caratteri speciali
Quando recuperi un backup del tuo database MySQL (chiamato "dump") e lo importi nel tuo database, potrebbe capitare che gli accenti (come é, à , ô) appaiano come simboli strani, come punti interrogativi (ad esempio "?" al posto di un accento).
Questo accade perché i backup di MySQL vengono generalmente creati utilizzando un formato speciale chiamato UTF-8
. In questo formato, le lettere con accenti occupano più spazio (sono codificate su due ottetti, un po' come due "unità " di dati per carattere). Nei server, questo funziona bene, ma se lavori sul tuo computer personale, potresti dover regolare alcune configurazioni per assicurarti che l'importazione avvenga correttamente utilizzando UTF-8
. Il problema dei caratteri strani si verifica generalmente quando c'è un disallineamento di codifica tra il file di backup e l'importazione. Questo può accadere se il file è codificato in un formato (ad esempio UTF-8
) ma MySQL si aspetta un altro codifica (ad esempio latin1
).
Ecco alcune soluzioni:
- Convertire il file : È possibile convertire il file di backup da
UTF-8
a un altro formato, chiamatolatin1
, prima di importarlo nel database. Questo può evitare che gli accenti siano mal interpretati, ma presenta delle limitazioni. Se il file contiene caratteri che non possono essere rappresentati inlatin1
(come alcuni caratteri speciali o non europei), si rischia di perdere questi caratteri durante la conversione. È quindi una soluzione da utilizzare con cautela e dipende dal tipo di dati presenti nel file SQL. - Specificare il formato corretto durante l'importazione: Se non hai convertito il file, puoi indicare, durante l'importazione, che il file è nel formato
iso-latin1
(durante l'importazione di un file SQL, puoi indicare esplicitamente che il file è in ISO-8859-1, anche chiamato latin1). Questo allinea l'encodage del file con quello atteso da MySQL, risolvendo generalmente il problema dei caratteri mal visualizzati.
Se vedi dei punti interrogativi al posto degli accenti, probabilmente significa che il file di backup è in un formato diverso da UTF-8
, ma il tuo software tenta di importarlo come se fosse in UTF-8
. Per evitare questo, su Linux, puoi utilizzare un comando chiamato iconv
per convertire il file in UTF-8 prima dell'importazione. Questo assicura che l'encodage sia coerente con le aspettative di MySQL.