Wissensdatenbank
1 000 FAQs, 500 Anleitungen und erläuternde Videos. Hier gibt es nur Lösungen!
Ein Problem mit der Zeichenkodierung von Webseiten beheben
Dieser Leitfaden richtet sich an Entwickler und Webmaster, die Probleme bei der Darstellung von Sonderzeichen (z. B. Akzente, arabische Zeichen, chinesische Zeichen, Emojis usw.) auf einer Infomaniak-Website oder in deren Datenbank feststellen.
Einleitung
- Häufige Ursachen für falsch dargestellte Zeichen, die anstelle von Sonderzeichen oder Emojis wie
??angezeigt werden:- PHP-Verbindung in
utf8anstelle vonutf8mb4 - MySQL-Tabelle oder -Spalte in
latin1oderutf8anstelle vonutf8mb4 - SQL-Datei, die anders als die Importeinstellung codiert ist
- Falsch codierte HTML-/CSS-/JS-Dateien
- Fehlende oder falsche Charset-Deklaration auf HTML-, PHP- oder HTTP-Ebene
- PHP-Verbindung in
- Übliche Lösungen:
- Überall
utf8mb4verwenden: Datenbank, Verbindungen, Tabellen, Spalten, Dateien, Header - Die Codierung aller Dateien und Datenbank-Dumps überprüfen
- Die Anzeige von Emojis, Akzenten und anderen mehrsprachigen Zeichen testen
- Überall
- Lesen Sie auch diese andere 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 MySQL-Kodierung utf8 unterstützt keine 4-Byte-Zeichen, wie z. B. Emojis. Diese werden als ?? angezeigt. Daher sollte utf8mb4 verwendet werden, das eine vollständige UTF-8-Implementierung darstellt.
2. HTML – Korrekte Angabe der Zeichenkodierung
Im <head> Ihrer HTML-Seiten:
Stellen Sie außerdem sicher, dass die CSS-/JS-Dateien im UTF-8-Format (ohne BOM) gespeichert sind.
Assurez-vous aussi que les fichiers CSS/JS sont enregistrés en UTF-8 (sans BOM).
3. PHP – UTF-8 oder UTF-8MB4 erzwingen
a) HTTP-Header
header('Content-Type: text/html; charset=utf-8');
b) MySQL-Verbindung (MySQL-API)
b) Connexion MySQL (API MySQL)
$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_cicodiert sein. - Auf der Registerkarte Operationen wählen Sie
utf8mb4_unicode_cifür die Sortierung aus.
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. .user.ini- / .htaccess-Datei
Um die Zeichenkodierung serverseitig (Apache) zu erzwingen:
AddDefaultCharset utf-8
Header set Content-Type "text/html; charset=utf-8"
# Für PHP
php_value default_charset UTF-8
php_value mbstring.internal_encoding UTF-8
6. Importieren/Exportieren von SQL-Dumps
Fehler, bei denen beispielsweise é zu ? oder ein Emoji ☺ zu ?? wird, entstehen oft durch eine fehlerhafte Zeichenkodierung.
Überprüfen Sie die Kodierung der SQL-Datei vor dem Import. Verwenden Sie gegebenenfalls iconv:
iconv -f ISO-8859-1 -t UTF-8 dump.sql > dump_utf8.sqlGeben Sie in phpMyAdmin die zu verwendende Zeichenkodierung für den Import an (z. B. UTF-8, UTF-8MB4 oder latin1, je nach Datei).
Link zu dieser FAQ: https://faq.infomaniak.com/1124
War diese FAQ nützlich?