Wissensdatenbank

1 000 FAQs, 500 Anleitungen und erläuternde Videos. 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 utf8 anstelle von utf8mb4
    • MySQL-Tabelle oder -Spalte in latin1 oder utf8 anstelle von utf8mb4
    • SQL-Datei unterschiedlich vom Importparameter codiert
    • HTML/CSS/JS-Dateien falsch codiert
    • Fehlende oder falsche Deklaration des charset auf HTML-, PHP- oder HTTP-Seite
  • 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
  • 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_ci oder utf8mb4_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 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-8

 

6. 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.sql

In phpMyAdmin geben Sie die Importcodierung an (z.B. UTF-8, UTF-8MB4 oder latin1 je nach Datei).


War diese FAQ nützlich?