PHP-MySQL - Umstellung auf UTF-8
Hallo zusammen,
nachdem der Admin hier ein schönes Tut zu UTF-8 geschrieben hat. Haben wir uns auch dazu entschlossen die Umstellung durchzuführen (ISO -> UTF-8). Ok, also eine kl. Datenbank genommen und diese komplett in UTF-8 umgewandelt. So, dann habe ich aus dem Tut die entsprechenden Zeilen für MySQL und PHP entnommen und bei uns eingefügt bzw. abgeändert.
Wenn ich nun im Internet Explorer die Seite öffne, habe ich das Problem mit ä,ö,ü,ß. Sprich es werden statt den entsprechenden Buchstaben seltsame Symbole angezeigt.
Der Server läuft mit Windows Server 2003 mit PHP und MyQL! Hat jemand von euch eine Idee, was ich vergessen bzw. falsch gemacht habe?!
Hier noch die Codezeilen, die wir ausgeführt haben.
php.ini:
index.php
SQL:
Gruß
Dani
nachdem der Admin hier ein schönes Tut zu UTF-8 geschrieben hat. Haben wir uns auch dazu entschlossen die Umstellung durchzuführen (ISO -> UTF-8). Ok, also eine kl. Datenbank genommen und diese komplett in UTF-8 umgewandelt. So, dann habe ich aus dem Tut die entsprechenden Zeilen für MySQL und PHP entnommen und bei uns eingefügt bzw. abgeändert.
Wenn ich nun im Internet Explorer die Seite öffne, habe ich das Problem mit ä,ö,ü,ß. Sprich es werden statt den entsprechenden Buchstaben seltsame Symbole angezeigt.
Der Server läuft mit Windows Server 2003 mit PHP und MyQL! Hat jemand von euch eine Idee, was ich vergessen bzw. falsch gemacht habe?!
Hier noch die Codezeilen, die wir ausgeführt haben.
php.ini:
default_mimetype = "text/html"
default_charset = "UTF-8"
index.php
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
SQL:
ALTER DATABASE `DATENBANK` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
ALTER TABLE `TABELLE` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
ALTER TABLE `TABELLE` CHANGE `FELD` `FELD` VARCHAR( 254 ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL ;
Gruß
Dani
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 56670
Url: https://administrator.de/contentid/56670
Ausgedruckt am: 23.11.2024 um 16:11 Uhr
19 Kommentare
Neuester Kommentar
Hallo Dani,
wo treten diese Probleme denn auf? Bei Umlauten aus der Datenbank oder aus PHP-Dateien?
Gruß,
Ahnenforscher
wo treten diese Probleme denn auf? Bei Umlauten aus der Datenbank oder aus PHP-Dateien?
Gruß,
Ahnenforscher
Hallo Dani,
also wenn es an den Dateien liegt, musst due die Dateien natürlich auch mit UTF-8-Encoding speichern. Aber vielleicht hast du mich falsch verstanden: Ich meine nicht, ob die Zeichen in der Datenbank richtig sind, sondern ob der Inhalt, der mit Hilfe von PHP aus der Datenbank ausgelesen wird, Probleme macht, oder es die "echos" in PHP-Dateien sind.
Gruß,
Ahnenforscher
also wenn es an den Dateien liegt, musst due die Dateien natürlich auch mit UTF-8-Encoding speichern. Aber vielleicht hast du mich falsch verstanden: Ich meine nicht, ob die Zeichen in der Datenbank richtig sind, sondern ob der Inhalt, der mit Hilfe von PHP aus der Datenbank ausgelesen wird, Probleme macht, oder es die "echos" in PHP-Dateien sind.
Gruß,
Ahnenforscher
Wie kann ich das am Besten herausfinden??
Hallo Dani,
naja ganz einfach: schreibe in irgendeine Datenbanktabelle eine Zeichenkette mit Umlauten und anderen Sonderzeichen und lese das dann mit PHP aus.
Anschließend schreibst du in der PHP-Datei unter dem MySQL-Auslesen einen Echo-Befehl, z. B.
echo "Sonderzeichentest aus PHP: äöüß";
Dann siehst du ja, ob es an Umlauten in der Datenbank oder in der PHP-Datei liegt.
Gruß,
Ahnenforscher
Sorry, aber jetzt verstehe ich dich nicht mehr:
echo und Datenbank wird richtig ausgegeben? Wo besteht denn dann dein Problem??
Gruß,
Ahnenforscher
echo und Datenbank wird richtig ausgegeben? Wo besteht denn dann dein Problem??
Gruß,
Ahnenforscher
Hallo,
jetzt verstehe ich dein Problem: Das Umlaute-Problem besteht also beim Auslesen der Datenbank per PHP.
Hast du mal probiert, den Datenbank-String nicht direkt von PHP ausgeben zu lassen, sondern mit Hilfe von utf8_encode umzuwandeln? Also z. B.
Gruß,
Ahnenforscher
jetzt verstehe ich dein Problem: Das Umlaute-Problem besteht also beim Auslesen der Datenbank per PHP.
Hast du mal probiert, den Datenbank-String nicht direkt von PHP ausgeben zu lassen, sondern mit Hilfe von utf8_encode umzuwandeln? Also z. B.
$output = utf8_encode($database);
Gruß,
Ahnenforscher
Hallo,
du musst den Zeichensatz von MySQL auf UTF-8 Unicode (utf8) setzen. Dies kannst du z. B. in PHPMyAdmin unter MySQL-Zeichensatz und Zeichensatz / Kollation der MySQL-Verbindung tun.
Gruß,
Ahnenforscher
PS: Ich bin hier auch gerade am konfigurieren von UTF-8 bei PHP und MySQL
du musst den Zeichensatz von MySQL auf UTF-8 Unicode (utf8) setzen. Dies kannst du z. B. in PHPMyAdmin unter MySQL-Zeichensatz und Zeichensatz / Kollation der MySQL-Verbindung tun.
Gruß,
Ahnenforscher
PS: Ich bin hier auch gerade am konfigurieren von UTF-8 bei PHP und MySQL
Und wie siehts mit der Kollation (dem Zeichensatz) der einzelnen Tabellenspalten aus?
Standardmäßig sind die nämlich latin1_german1_ci. Und laut deinem Skript gang am Anfang hast du die einzelnen Tabellenspalten nicht angepasst?
Gruß,
Ahnenforscher
Standardmäßig sind die nämlich latin1_german1_ci. Und laut deinem Skript gang am Anfang hast du die einzelnen Tabellenspalten nicht angepasst?
Gruß,
Ahnenforscher
Was ist mit den Einstellungen in der my.cnf?
Also character-set-server und default-character-set.
Die my.cnf bzw. my.ini liegt unter Windows meißt im WINDOWS-Verzeichnis.
Gruß,
Ahnenforscher
Also character-set-server und default-character-set.
Die my.cnf bzw. my.ini liegt unter Windows meißt im WINDOWS-Verzeichnis.
Gruß,
Ahnenforscher
Hallo Dani,
ich hab mich mal heute morgen ein wenig für dich schlaugemacht - viel konnte ich allerdings auch nicht erfahren
Also, du kannst auf jeden Fall den Datenbankserver dazu zwingen, Inhalte im UTF-8-Format auszugeben, wenn du folgenden ersten Query ausführst:
Auf eine andere Art und Weise wird es wahrscheinlich nicht gehen, da, so wie ich gehört habe, dass ganze von der mysql-DLL-Datei abhängt, die PHP für die Verbindung mit dem MySQL-Server nutzt. Also egal, was auf dem Server eingestellt ist, erzwingt die mysql.dll von PHP den Server zum Senden der Daten im ISO-Format.
Probiers mal aus,
Gruß,
Ahnenforscher
ich hab mich mal heute morgen ein wenig für dich schlaugemacht - viel konnte ich allerdings auch nicht erfahren
Also, du kannst auf jeden Fall den Datenbankserver dazu zwingen, Inhalte im UTF-8-Format auszugeben, wenn du folgenden ersten Query ausführst:
mysql_query("SET NAMES 'utf8'");
mysql_query("SET CHARACTER SET 'utf8'");
Auf eine andere Art und Weise wird es wahrscheinlich nicht gehen, da, so wie ich gehört habe, dass ganze von der mysql-DLL-Datei abhängt, die PHP für die Verbindung mit dem MySQL-Server nutzt. Also egal, was auf dem Server eingestellt ist, erzwingt die mysql.dll von PHP den Server zum Senden der Daten im ISO-Format.
Probiers mal aus,
Gruß,
Ahnenforscher
Hallo Dani,
natürlich ist es OK, dass du diesen Lösungsweg im Tutorial von Frank postest
Gruß,
Ahnenforscher
PS: Bin seit neustem Moderator in diesem Bereich "Webentwicklung"
natürlich ist es OK, dass du diesen Lösungsweg im Tutorial von Frank postest
Gruß,
Ahnenforscher
PS: Bin seit neustem Moderator in diesem Bereich "Webentwicklung"