Base di conoscenze
1 000 FAQ, 500 tutorial e video esplicativi. Qui ci sono delle soluzioni!
Risolvere un problema di codifica delle pagine
Questa guida è rivolta a sviluppatori e webmaster che riscontrano problemi di visualizzazione di caratteri speciali (ad esempio accenti, caratteri arabi, cinesi, emoji, ecc.), sia su un sito web Infomaniak che nel suo database.
Introduzione
- Cause frequenti di caratteri visualizzati in modo errato che appaiono al posto di caratteri speciali o emoji come
??:- Connessione PHP in
utf8invece diutf8mb4 - Tabella o colonna MySQL in
latin1outf8invece diutf8mb4 - File SQL codificato in modo diverso dal parametro di importazione
- File HTML/CSS/JS codificati in modo errato
- Assenza o dichiarazione errata del charset lato HTML, PHP o HTTP
- Connessione PHP in
- Soluzioni abituali:
- Utilizzare
utf8mb4ovunque: database, connessioni, tabelle, colonne, file, intestazioni - Verificare la codifica di tutti i file e i dump
- Testare la visualizzazione di emoji, accenti e altri caratteri multilingue
- Utilizzare
- Consultate anche questa guida per forzare una codifica diversa durante la connessione a un database MySQL.
Utilizzate un editor di testo che supporti il salvataggio in UTF-8 senza BOM (Visual Studio Code, Sublime Text, Notepad++...)
1. Utilizzare UTF-8 o UTF-8MB4 ovunque
La codifica utf8 di MySQL non supporta i caratteri a 4 byte, come le emoji. Questi verranno visualizzati come ??. È quindi necessario utilizzare utf8mb4, che è una vera e propria implementazione completa di UTF-8.
2. HTML – Dichiarazione corretta della codifica
Nell'elemento <head> delle vostre pagine HTML:
Assicurati inoltre che i file CSS/JS siano salvati in formato UTF-8 (senza BOM).
Assurez-vous aussi que les fichiers CSS/JS sont enregistrés en UTF-8 (sans BOM).
3. PHP – Impostare UTF-8 o UTF-8MB4
a) Intestazioni HTTP
header('Content-Type: text/html; charset=utf-8');
b) Connessione MySQL (API MySQL)
b) Connexion MySQL (API MySQL)
$connection = mysql_connect($host, $user, $pass);
mysql_set_charset('utf8mb4', $connection);c) Connessione PDO
$dsn = "mysql:host=localhost;dbname=ma_base;charset=utf8mb4";
$pdo = new PDO($dsn, $user, $pass, [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
]);
4. Database MySQL
a) Configurazione in phpMyAdmin
- Il database, le tabelle e le colonne devono essere in
utf8mb4_unicode_cioutf8mb4_general_ci. - Nella scheda Operazioni, seleziona
utf8mb4_unicode_ciper il confronto.
b) Comandi SQL utili
ALTER DATABASE ma_base CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
ALTER TABLE ma_table CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;c) Dopo la connessione PHP
mysqli_query($conn, "SET NAMES 'utf8mb4'");
mysqli_query($conn, "SET CHARACTER SET 'utf8mb4'");
5. File .user.ini / .htaccess
Per forzare la codifica lato server (Apache):
AddDefaultCharset utf-8
Header set Content-Type "text/html; charset=utf-8"
# Per PHP
php_value default_charset UTF-8
php_value mbstring.internal_encoding UTF-8
6. Importazione/esportazione di dump SQL
Errori come é che diventa ? o un emoji ☺ che diventa ?? sono spesso causati da una mancata corrispondenza della codifica.
Verifica la codifica del file SQL prima dell'importazione. Se necessario, utilizza iconv:
iconv -f ISO-8859-1 -t UTF-8 dump.sql > dump_utf8.sqlIn phpMyAdmin, specifica la codifica per l'importazione (ad esempio UTF-8, UTF-8MB4 o latin1, a seconda del file).
Link a questa FAQ: https://faq.infomaniak.com/1124
Questa FAQ è stata utile?