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
utf8anstelle vonutf8mb4 - MySQL-Tabelle oder -Spalte in
latin1oderutf8anstelle 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
utf8mb4verwenden: 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_cioderutf8mb4_general_cisein. - Im Reiter Operationen wählen Sie
utf8mb4_unicode_cifü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-86. 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.sqlIn phpMyAdmin, geben Sie die Importkodierung an (z.B. UTF-8, UTF-8MB4 oder latin1 je nach Datei).