1000 FAQ, 500 Anleitungen und Lernvideos. Hier gibt es nur Lösungen!
Ein Problem mit der Seitenkodierung beheben
Diese Anleitung richtet sich an Entwickler und Webmaster, die Probleme mit der Anzeige von Sonderzeichen (z.B. Akzente, arabische Zeichen, chinesische Zeichen, Emojis usw.) haben, sei es auf einer Infomaniak-Webseite oder in deren Datenbank.
Vorbemerkung
- Häufige Ursachen für falsch angezeigte Zeichen, die anstelle von Sonderzeichen oder Emojis erscheinen, wie
??
:- PHP-Verbindung in
utf8
anstelle vonutf8mb4
- MySQL-Tabelle oder -Spalte in
latin1
oderutf8
anstelle vonutf8mb4
- SQL-Datei anders codiert als der Importparameter
- Falsch codierte HTML/CSS/JS-Dateien
- Fehlende oder falsche Angabe des charset auf HTML-, PHP- oder HTTP-Seite
- PHP-Verbindung in
- Gewöhnliche Lösungen:
- Überall
utf8mb4
verwenden: Datenbank, Verbindungen, Tabellen, Spalten, Dateien, Header - Die Kodierung aller Dateien und Dumps überprüfen
- Testen Sie die Anzeige von Emojis, Akzenten und anderen mehrsprachigen Zeichen
- Überall
- Nehmen Sie auch Kenntnis von dieser anderen Anleitung, um eine andere Kodierung bei der Verbindung zu einer MySQL-Datenbank zu erzwingen.
Verwenden Sie einen Texteditor, der das Speichern in UTF-8 ohne BOM unterstützt (Visual Studio Code, Sublime Text, Notepad++...)
1. Überall UTF-8 oder UTF-8MB4 verwenden
Die Kodierung utf8
von MySQL unterstützt keine Zeichen mit 4 Bytes, wie Emojis. Diese werden als ??
angezeigt. Es muss daher utf8mb4
verwendet werden, das eine echte vollständige Implementierung von UTF-8 ist.
2. HTML – Richtige Angabe der Kodierung
Im <head>
Ihrer HTML-Seiten:
<meta charset="UTF-8">
Stellen Sie sicher, dass die CSS/JS-Dateien in UTF-8 (ohne BOM) gespeichert sind.
3. PHP – UTF-8 oder UTF-8MB4 erzwingen
a) HTTP-Header
header('Content-Type: text/html; charset=utf-8');
b) MySQL-Verbindung (MySQL-API)
$connection = mysql_connect($host, $user, $pass);
mysql_set_charset('utf8mb4', $connection);
c) PDO-Verbindung
$dsn = "mysql:host=localhost;dbname=ma_base;charset=utf8mb4";
$pdo = new PDO($dsn, $user, $pass, [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
]);
4. MySQL-Datenbank
a) Konfiguration in phpMyAdmin
- Datenbanken, Tabellen und Spalten müssen in
utf8mb4_unicode_ci
oderutf8mb4_general_ci
sein. - Im Reiter Operationen wählen Sie
utf8mb4_unicode_ci
für die Sortierung.
b) Nützliche SQL-Befehle
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) Nach der PHP-Verbindung
mysqli_query($conn, "SET NAMES 'utf8mb4'");
mysqli_query($conn, "SET CHARACTER SET 'utf8mb4'");
5. Datei .user.ini / .htaccess
Um die Kodierung auf Serverseite (Apache) zu erzwingen:
AddDefaultCharset utf-8
Header set Content-Type "text/html; charset=utf-8"
# Pour PHP
php_value default_charset UTF-8
php_value mbstring.internal_encoding UTF-8
6. Import/Export von SQL-Dumps
Fehler wie é
wird zu ?
oder ein Emoji ☺ wird zu ??
entstehen oft durch eine Codierungsdiskrepanz.
Überprüfen Sie die Kodierung der SQL-Datei vor dem Import. Verwenden Sie iconv
falls notwendig:
iconv -f ISO-8859-1 -t UTF-8 dump.sql > dump_utf8.sql
In phpMyAdmin, geben Sie die Importkodierung an (z.B. UTF-8
, UTF-8MB4
oder latin1
je nach Datei).