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 Website oder in einer Datenbank haben, die bei Infomaniak gehostet wird.
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 im UTF-8-Format 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:
<meta charset="UTF-8">Stellen Sie außerdem sicher, dass die CSS/JS-Dateien im UTF-8-Format (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_cicodiert sein. - 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. .user.ini- / .htaccess-Datei
Um die serverseitige Kodierung (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, bei denen beispielsweise é zu ? oder ein Emoji ☺ zu ?? wird, entstehen oft durch eine fehlerhafte Zeichenkodierung.
Überprüfen Sie vor dem Import die Zeichenkodierung der SQL-Datei. 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?