Warnung: file_put_contents(/home/www/web1/html/php_dev/test.txt) [function.file-put-contents]: failed to open stream: Permission denied in /home/www/web1/html/php_dev/sys/lib.activity.php (Zeile 58)
Falsche Kodierung trotz richtigem META Tag [Archiv] - PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr

- Ad -
php-resource




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!

 
wahsaga
03-06-2010, 21:15 
 
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?

 
h3ll
03-06-2010, 23:32 
 
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.

 
wahsaga
04-06-2010, 00:13 
 
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.

 
combie
04-06-2010, 00:25 
 
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.

 
wahsaga
04-06-2010, 00:28 
 
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!

 
combie
04-06-2010, 00:46 
 
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"?

 
combie
04-06-2010, 01:00 
 
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

 
combie
04-06-2010, 01:32 
 
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)

 
h3ll
04-06-2010, 02:24 
 
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.


Alle Zeitangaben in WEZ +2. Es ist jetzt 16:57 Uhr.