Hallo zusammen, vielleicht kennt hier jemand das Problem: Bisher lief ein Webserver unter Suse 9.3 mit PHP 4.3 und MySQL 5.1. Jetzt habe ich Suse 11.1 mit PHP 5.2.12 (mit suhosin) und MySQL 5.1. Die Datenbank wird via PHP-Skript auf der Konsole täglich aktualisiert. Auf dem alten Server lief alles problemlos. Das Skript ruft eine XML-Datei auf, die mit ISO 8859-1 kodiert ist. Das ist sicher. Ich habe den Stream ausgelesen. Es steht Iso 8859-1 drüber und es ist auch ISO 8859-1 drin. Ebenso behauptet PHP, dass es mit dem Server diese Kodierung ausgehandelt hat. Frage ich das am Ende des Skripts ab, dann steht da latin1. Der Server ist folgendermaßen konfiguriert: [mysqld] ... set-variable=character-set-server=latin1 init-connect='SET NAMES latin1' skip-character-set-client-handshake ... In der zuständigen php.ini steht: ... default_mimetype = "text/html" default_charset = "iso-8859-1" ... Im Skript selbst steht: ... $db->query("SET NAMES 'latin1'"); $db->query("SET CHARACTER SET 'latin1'"); ... Das macht dasselbe wie mysql_query. Versuchsweise habe ich serverweit UTF-8 abgeschaltet (via Yast). Trotz alledem kommen in der DB kaputte Umlaute an. Ich werfe also oben ISO 8859-1 rein und unten kommt es auch raus. Aber irgendwo unterwegs wird das in UTF-8 konvertiert. Mir sind jetzt die Ideen ausgegangen, woran das liegen könnte. Das Skript selbst tut nichts anderes, als die XML-kodierten Datensätze auszulesen, der Datenstruktur entsprechend auseinander zu pflücken und einzeln in die DB zu schreiben. Typenkonvertierung findet nicht statt. Hat noch jemand eine Idee, die ich noch nicht ergoogelt habe? Liebe Grüße Erik -- "Sind meine Gedanken, was geschehen kann, manchmal trübe und verworren, bringt ihnen die Glut einer Cigarre Licht und mein Denken setzt seinen Weg fort." Diego Garcia Erik P. Roderwald * Uhlenhoffweg 18 * 21129 Hamburg Telefon: +49 (0)40 8510 3150 * Fax: +49(0)40 8510 3148 http://www.zigarren-rollen.de http://www.roderwald.de http://forum.roderwald.de http://twitter.com/erikrode -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Erik P. Roderwald schrieb:
Hallo zusammen,
vielleicht kennt hier jemand das Problem:
Bisher lief ein Webserver unter Suse 9.3 mit PHP 4.3 und MySQL 5.1. Jetzt habe ich Suse 11.1 mit PHP 5.2.12 (mit suhosin) und MySQL 5.1.
Die Datenbank wird via PHP-Skript auf der Konsole täglich aktualisiert. Auf dem alten Server lief alles problemlos. Das Skript ruft eine XML-Datei auf, die mit ISO 8859-1 kodiert ist. Das ist sicher. Ich habe den Stream ausgelesen. Es steht Iso 8859-1 drüber und es ist auch ISO 8859-1 drin. Ebenso behauptet PHP, dass es mit dem Server diese Kodierung ausgehandelt hat. Frage ich das am Ende des Skripts ab, dann steht da latin1.
Der Server ist folgendermaßen konfiguriert:
[mysqld] ... set-variable=character-set-server=latin1 init-connect='SET NAMES latin1' skip-character-set-client-handshake ...
In der zuständigen php.ini steht:
... default_mimetype = "text/html" default_charset = "iso-8859-1" ...
Im Skript selbst steht:
... $db->query("SET NAMES 'latin1'"); $db->query("SET CHARACTER SET 'latin1'"); ...
Das macht dasselbe wie mysql_query.
Versuchsweise habe ich serverweit UTF-8 abgeschaltet (via Yast).
Trotz alledem kommen in der DB kaputte Umlaute an. Ich werfe also oben ISO 8859-1 rein und unten kommt es auch raus. Aber irgendwo unterwegs wird das in UTF-8 konvertiert. Mir sind jetzt die Ideen ausgegangen, woran das liegen könnte. Das Skript selbst tut nichts anderes, als die XML-kodierten Datensätze auszulesen, der Datenstruktur entsprechend auseinander zu pflücken und einzeln in die DB zu schreiben. Typenkonvertierung findet nicht statt. Hat noch jemand eine Idee, die ich noch nicht ergoogelt habe?
Liebe Grüße
Erik
Hi, mit mysql kenne ich mich nicht aus. Aber bei postgreSQL legst Du das charset einer DB bei der Anlage fest und ich glaube nicht, dass man das für die DB nochmal ändern kann. Wenn das bei mysql genauso ist, musst Du wohl für explizite Konvertierung sorgen... Wenn Du bei der DB-Anlage keine Angabe machst, wird heute sicher utf-8 genommen (hat mit den Servereinstellungen nix zu tun), früher war das sicher latin1. cu jth -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Hallo zusammen, On Donnerstag 18 März 2010, Joerg Thuemmler wrote:
Wenn Du bei der DB-Anlage keine Angabe machst, wird heute sicher utf-8 genommen (hat mit den Servereinstellungen nix zu tun), früher war das sicher latin1.
Leider nein. Die Tabellen sind auch latin1-kodiert. Das ist auch sicher. Deshalb habe ich ja die kaputten Umlaute. Und es ist nicht gewünscht (nicht von mir), die ganze DB in UTF-8 zu konvertieren. Liebe Grüße Erik -- "Wenn ich im Himmel nicht rauchen darf, gehe ich nicht hin." Mark Twain Erik P. Roderwald * Uhlenhoffweg 18 * 21129 Hamburg Telefon: +49 (0)40 8510 3150 * Fax: +49(0)40 8510 3148 http://www.zigarren-rollen.de http://www.roderwald.de http://forum.roderwald.de http://twitter.com/erikrode -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Erik P. Roderwald schrieb:
Hallo zusammen,
On Donnerstag 18 März 2010, Joerg Thuemmler wrote:
Wenn Du bei der DB-Anlage keine Angabe machst, wird heute sicher utf-8 genommen (hat mit den Servereinstellungen nix zu tun), früher war das sicher latin1.
Leider nein. Die Tabellen sind auch latin1-kodiert. Das ist auch sicher. Deshalb habe ich ja die kaputten Umlaute. Und es ist nicht gewünscht (nicht von mir), die ganze DB in UTF-8 zu konvertieren.
Liebe Grüße
Erik
Was für php-Funktionen verwendet Dein Script? Könnte eine davon utf-8 ausgeben. Ich denke da an solche replace-Sachen, die Datenfelder vor Schadcode sichern helfen, Eliminieren von Sonderzeichen, die für Angriffe nutzbar sind... Was passiert, wenn Du latin1-Sonderzeichen hardcodiert in den Feldfüllbefehl selbst einbaust? Kommen die auch als utf8? Ein UPDATE db SET feld='ÄÖÜß' ... setzt korrektes latin1 ein? cu jth -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Hallo zusammen, On Donnerstag 18 März 2010, Joerg Thuemmler wrote:
Was für php-Funktionen verwendet Dein Script? Könnte eine davon utf-8 ausgeben.
Das war der entscheidende Tipp. Danke. Es ist der XML-Parser (xml_parser_create()). Bei dieser Funktion ist der Default von Iso 8859-1 auf UTF-8 mit der Version 5.0.2 umgestellt worden. Liebe Grüße Erik -- "Toleranz kann man von den Rauchern lernen. Noch nie hat sich ein Raucher über einen Nichtraucher beschwert." Alessandro Pertini Erik P. Roderwald * Uhlenhoffweg 18 * 21129 Hamburg Telefon: +49 (0)40 8510 3150 * Fax: +49(0)40 8510 3148 http://www.zigarren-rollen.de http://www.roderwald.de http://forum.roderwald.de http://twitter.com/erikrode -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
On Thursday 18 March 2010 13.16:09, Erik P. Roderwald wrote:
Hallo zusammen,
On Donnerstag 18 März 2010, Joerg Thuemmler wrote:
Wenn Du bei der DB-Anlage keine Angabe machst, wird heute sicher utf-8 genommen (hat mit den Servereinstellungen nix zu tun), früher war das sicher latin1.
Leider nein. Die Tabellen sind auch latin1-kodiert. Das ist auch sicher. Deshalb habe ich ja die kaputten Umlaute. Und es ist nicht gewünscht (nicht von mir), die ganze DB in UTF-8 zu konvertieren.
Liebe Grüße
Erik
Ich hatte das gleiche Problem, aber umgekehrt. Was passiert, wenn du im php- script gleich nach dem connect mal angibst: mysql_set_charset(latin1) ? Daniel -- Daniel Bauer photographer Basel Barcelona professional photography: http://www.daniel-bauer.com -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
participants (3)
-
Daniel Bauer
-
Erik P. Roderwald
-
Joerg Thuemmler