1000 FAQ, 500 Anleitungen und Lernvideos. Hier gibt es nur Lösungen!
Ein Problem mit der Seitenkodierung beheben
Dieser Leitfaden richtet sich an Entwickler und Webmaster, die Probleme mit der Anzeige von Sonderzeichen (z.B. Akzente, arabische Zeichen, chinesische Zeichen, Emojis, etc.) haben, sei es auf einer Infomaniak-Website oder in ihrer Datenbank.
Vorwort
- 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 unterschiedlich vom Importparameter codiert
- HTML/CSS/JS-Dateien falsch codiert
- Fehlende oder falsche Deklaration des charset auf HTML-, PHP- oder HTTP-Seite
- PHP-Verbindung in
- Gewöhnliche Lösungen:
- Verwenden Sie
utf8mb4überall: Datenbank, Verbindungen, Tabellen, Spalten, Dateien, Header - Codierung aller Dateien und Dumps überprüfen
- Anzeige von Emojis, Akzenten und anderen mehrsprachigen Zeichen testen
- Verwenden Sie
- Nehmen Sie auch Kenntnis von diesem anderen Leitfaden, um eine andere Codierung 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. Verwenden Sie UTF-8 oder UTF-8MB4 überall
Die MySQL-Codierung utf8 unterstützt keine 4-Bytes-Zeichen, wie Emojis. Diese werden als ?? angezeigt. Daher muss utf8mb4 verwendet werden, das eine echte vollständige Implementierung von UTF-8 ist.
2. HTML – Richtige Deklaration der Codierung
Im <head> Ihrer HTML-Seiten:
<meta charset="UTF-8">Stellen Sie auch 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
- Datenbank, 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 Codierung auf der 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 ?? stammen oft von einer Codierungsfehlausrichtung.
Überprüfen Sie die Codierung der SQL-Datei vor dem Import. Verwenden Sie iconv falls erforderlich:
iconv -f ISO-8859-1 -t UTF-8 dump.sql > dump_utf8.sqlIn phpMyAdmin geben Sie die Importcodierung an (z.B. UTF-8, UTF-8MB4 oder latin1 je nach Datei).