Archiv verlassen und diese Seite im Standarddesign anzeigen : Falsche Kodierung trotz richtigem META Tag
f.gruber 03-06-2010, 21:05 Hallo,
ich stehe vor einem Rätsel. Trotz Angabe der Kodierung im Head Bereich einer HTML Seite wird die Seite im Browser mit einer anderen Kodierung dargestellt.
Im Quelltext sieht man folgende Zeile im Head der Seite:
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
Ich vermute, dass es eher nichts mit PHP zu tun hat, ich habe die Seite aber mit PHP gemacht, daher poste ich das Problem trotzdem hier. Den PHP Code habe ich unter KDE mit Quanta+ geschrieben und die Kodierung im Editor natürlich auf UTF-8 eingestellt.
Was mich wundert ist, dass die Namen, die aus der Datenbank kommen, richtig kodiert sind.
Andere Umlaute, wie zum Beispiel im Wort "Löschen" sind bei mir jedenfalls vermurkst. Habe das mit Firefox unter Linux und Windows probiert. Auch mit dem IE ist es das gleiche.
Und noch etwas: Die gleiche Seite wird bei mir zu Hause auf dem lokalen Webserver und lokalem MySQL Server richtig angezeigt ...
Da blicke ich nicht mehr durch. Hat es etwas mit dem Provider zu tun oder habe ich einen Fehler gemacht, den ich nicht sehe oder ... ?
Bitte um Hilfe!
Eine Angabe zur Zeichenkodierung in den HTTP-Antwortheadern hat bekanntlich Vorang vor einer per META-Element gemachten ...
http://web-sniffer.net/?url=http://abendmusikdaten.c12535.s10-irmler.irmler.at/index.php
AmicaNoctis 03-06-2010, 21:17 Hallo,
es könnte schon ein PHP-Problem sein, versuch mal folgendes am Anfang (!) des Scripts einzufügen:
header("Content-Type: text/html; charset=UTF-8");
Gruß,
Amica
f.gruber 03-06-2010, 23:21 ... versuch mal folgendes am Anfang (!) des Scripts einzufügen:
header("Content-Type: text/html; charset=UTF-8");
Danke für diesen Tipp. Habe diese Zeile am Anfang des Skriptes eingefügt. Das Ergebnis ist überraschend:
Die aus der Datenbank generierten Namen haben jetzt zerstörte Umlaute, dafür wird der Rest der Seite richtig dargestellt, jedenfalls bei meinem Computer ...
f.gruber 03-06-2010, 23:31 Eine Angabe zur Zeichenkodierung in den HTTP-Antwortheadern hat bekanntlich Vorang vor einer per META-Element gemachten ...
View HTTP Request and Response Header (http://web-sniffer.net/?url=http://abendmusikdaten.c12535.s10-irmler.irmler.at/index.php)
Da verstehe ich leider nur Bahnhof. Bin ein Hobby Programmierer.
Was ist ein Antwortheader?
Wie kann ich das beeinflussen?
Ja, und warum wird bei meinem Server alles korrekt dargestellt :confused:
AmicaNoctis 03-06-2010, 23:31 Dann behandelst du die DB-Daten falsch. Welche Zeichencodierung haben die Daten und welche hast du für die Verbindung benutzt?
Die aus der Datenbank generierten Namen haben jetzt zerstörte Umlaute, dafür wird der Rest der Seite richtig dargestellt, jedenfalls bei meinem Computer ...
Welchen Zeichensatz verwendet die Datenbankverbindung von PHP?
f.gruber 04-06-2010, 00:10 Welchen Zeichensatz verwendet die Datenbankverbindung von PHP?
Wie kann ich das feststellen?
mysql_set_charset ("UTF-8"); liefert folgendes:
Call to undefined function mysql_set_charset()
Das dürfte bedeuten, dass beim Provider eine zu alte MySQL oder PHP Version installiert ist, sehe ich das richtig?
mysql_query("SET NAMES 'UTF-8'");
mysql_query("SET CHARACTER SET 'UTF-8'");
habe ich auch versucht - ohne Wirkung.
mysql_query("SET NAMES 'UTF-8'");
mysql_query("SET CHARACTER SET 'UTF-8'");
habe ich auch versucht - ohne Wirkung.
Hast du anschließend auch mit neuen Daten getestet ...?
Denn die alten sind höchstwahrscheinlich schon korrupt, wenn du vorher beim Einfügen dieser nicht die Kodierung angegeben hast.
mysql_set_charset ("UTF-8"); // falsch
mysql_set_charset ("utf8"); // erheblich besser
// genauso falsch!
mysql_query("SET NAMES 'UTF-8'");
mysql_query("SET CHARACTER SET 'UTF-8'");
//besser
mysql_query("SET NAMES 'utf8'");
mysql_query("SET CHARACTER SET 'utf8'");
f.gruber 04-06-2010, 00:26 Hast du anschließend auch mit neuen Daten getestet ...?
Denn die alten sind höchstwahrscheinlich schon korrupt, wenn du vorher beim Einfügen dieser nicht die Kodierung angegeben hast.
Die Daten werden mit phpMyAdmin ganz korrekt angezeigt. Ausserdem verwende ich ja die gleiche Datenbank (MySQLDump) auf meinem Server und alles ist ok.
Die Daten werden mit phpMyAdmin ganz korrekt angezeigt.
Und welche Kodierung hast du im phpMyAdmin eingestellt ...?
f.gruber 04-06-2010, 00:40 mysql_set_charset ("UTF-8"); // falsch
mysql_set_charset ("utf8"); // erheblich besser
Diese Funktion kennt er wirklich nicht ...
// genauso falsch!
mysql_query("SET NAMES 'UTF-8'");
mysql_query("SET CHARACTER SET 'UTF-8'");
//besser
mysql_query("SET NAMES 'utf8'");
mysql_query("SET CHARACTER SET 'utf8'");
Ja, ja, ja -----> :beer:
Das war der Fehler. Hat mich Stunden gekostet. Vielen, vielen Dank für's genaue Hinschauen!
Jetzt geh' ich einen trinken.
Gute Nacht alle zusammen!
Diese Funktion kennt er wirklich nicht ...
Aktiviere mal PHP5 ....
f.gruber 04-06-2010, 00:55 Aktiviere mal PHP5 ....
Wie kann ich feststellen, welche PHP Version der Provider hat? Der Provider hat die Funkion phpinfo() deaktiviert - aus "security reasons".
Wie soll ich bzw. kann ich PHP5 "aktivieren"?
PHP: Predefined Constants - Manual (http://de2.php.net/manual/en/reserved.constants.php#reserved.constants.core)
Ansonsten: Provider fragen.
f.gruber 04-06-2010, 01:19 PHP: Predefined Constants - Manual (http://de2.php.net/manual/en/reserved.constants.php#reserved.constants.core)
Das liefert echo PHP_VERSION;
5.2.0-8+etch16
Die am Server installierte Version kann also nicht zu alt sein.
Wie aber kann man eine Version "aktivieren" ???
Ich bekomme folgende Fehlermeldung:
Fatal error: Call to undefined function mysql_set_charset() in /var/www/irgendwo/index.php on line 17
mysql_set_charset (PHP 5 >= 5.2.3)
Gibts erst ab 5.2.3
PHP: mysql_set_charset - Manual (http://de.php.net/manual/en/function.mysql-set-charset.php)
Das liefert echo PHP_VERSION;
5.2.0-8+etch16
Die am Server installierte Version kann also nicht zu alt sein.
PHP 5.2.0 ist immerhin fast 4 Jahre alt.
onemorenerd 04-06-2010, 10:48 Wie aber kann man eine Version "aktivieren" ???
Manche Hoster (vornehmlich 1&1) bieten mehrere Versionen parallel, so dass jeder Kunde selbst entscheiden kann, welche Version er benutzt. Das "aktivieren" geschieht durch einen Eintrag in der .htaccess oder bestimmte Dateiendungen für die Scripte. Jeder Hoster, der mehrere Versionen anbietet, beschreibt sicherlich irgendwo auf den eigenen Seiten, wie man zwischen den Versionen umschalten kann.
Wenn dein Hoster nur eine Version anbietet, kannst du höflich um ein Update bitten. Vermutlich lässt er sich nicht drauf ein. Dann ist ein Wechsel angesagt.
Wenn du Root-Rechte auf einem eigenen Server hast, kannst du beliebige PHP-Versionen installieren. Sollte 5.2.3 oder höher noch nicht als Paket für dein OS existieren, musst du PHP selbst kompilieren.
|