dani
Goto Top

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:
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

Content-Key: 56670

Url: https://administrator.de/contentid/56670

Printed on: April 19, 2024 at 02:04 o'clock

Mitglied: 17735
17735 Apr 15, 2007 at 12:40:13 (UTC)
Goto Top
Hallo Dani,

wo treten diese Probleme denn auf? Bei Umlauten aus der Datenbank oder aus PHP-Dateien?

Gruß,
Ahnenforscher
Member: Dani
Dani Apr 15, 2007 at 13:24:28 (UTC)
Goto Top
Hi,
also in der DB stehen die Zeichen richtig drinne!! => PHP.


Gruß
Dani
Mitglied: 17735
17735 Apr 15, 2007 at 14:20:44 (UTC)
Goto Top
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
Member: Dani
Dani Apr 15, 2007 at 15:39:51 (UTC)
Goto Top
Hi,
also ich benutze Notepad++. Dort habe ich die Koodierung auf UFT-8 umgestellt. Würde sonst ja nichts bringen.

sondern ob der Inhalt, der mit Hilfe von PHP aus der Datenbank ausgelesen wird, Probleme
macht, oder es die "echos" in PHP-Dateien sind.
Wie kann ich das am Besten herausfinden??


Gruß
Dani
Mitglied: 17735
17735 Apr 15, 2007 at 16:10:51 (UTC)
Goto Top
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
Member: Dani
Dani Apr 15, 2007 at 16:16:34 (UTC)
Goto Top
Hi,
also mit "echo" gibt er die Zeichen ganz normal aus.
In der DB stehen die Zeichen auch richtig drinne. *grübel*


Gruß
Dani
Mitglied: 17735
17735 Apr 15, 2007 at 16:22:55 (UTC)
Goto Top
Sorry, aber jetzt verstehe ich dich nicht mehr:

echo und Datenbank wird richtig ausgegeben? Wo besteht denn dann dein Problem??

Gruß,
Ahnenforscher
Member: Dani
Dani Apr 15, 2007 at 16:28:41 (UTC)
Goto Top
Also in der Datenbank stehen alle Zeichen richtig. Wenn ich nun in eine Datei echo "äüöß" mache, werden diese auch richtig angezeigt.
Das Problem muss in der Übergabe von SQL => PHP sein. Aber wo??


Gruß
Dani
Mitglied: 17735
17735 Apr 15, 2007 at 16:39:17 (UTC)
Goto Top
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.

$output = utf8_encode($database);

Gruß,
Ahnenforscher
Member: Dani
Dani Apr 15, 2007 at 16:46:37 (UTC)
Goto Top
Hi,
also so gehts wunderbar! Es liegt also an MySQL!! Was habe ich vergessen??


Gruß
Dani
Mitglied: 17735
17735 Apr 15, 2007 at 16:51:13 (UTC)
Goto Top
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 face-wink
Member: Dani
Dani Apr 15, 2007 at 16:59:52 (UTC)
Goto Top
Das steht bereits auf UTF-8!!


GRuß
Dani
Mitglied: 17735
17735 Apr 15, 2007 at 17:03:40 (UTC)
Goto Top
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
Member: Dani
Dani Apr 15, 2007 at 17:05:37 (UTC)
Goto Top
Sorry...habe ich vergessen zu posten. Natürlich sind diese auf UTF-8 konvertiert.


GRuß
Dani
Mitglied: 17735
17735 Apr 15, 2007 at 17:13:21 (UTC)
Goto Top
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
Member: Dani
Dani Apr 15, 2007 at 18:04:55 (UTC)
Goto Top
Hi,
also so sehen die Zeilen bei mir aus:
character-set-server 	= utf8
collation-server 		= utf8_general_ci
default-character-set 	= utf8


Gruß
Dani
Mitglied: 17735
17735 Apr 16, 2007 at 14:00:49 (UTC)
Goto Top
Hallo Dani,

ich hab mich mal heute morgen ein wenig für dich schlaugemacht - viel konnte ich allerdings auch nicht erfahren face-wink

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
Member: Dani
Dani Apr 16, 2007 at 22:21:57 (UTC)
Goto Top
G' Abend,
wunderbar...so klappts es prima! Ich danke dir! Ich poste dieen Lösungsweg noch im Tut von Frank. OK?


Gruß
Dani
Mitglied: 17735
17735 Apr 17, 2007 at 12:26:20 (UTC)
Goto Top
Hallo Dani,

natürlich ist es OK, dass du diesen Lösungsweg im Tutorial von Frank postest face-wink

Gruß,
Ahnenforscher

PS: Bin seit neustem Moderator in diesem Bereich "Webentwicklung"