phpbar.de logo

Mailinglisten-Archive

[php] [Loesung?] Zeichencodierung Russisch

[php] [Loesung?] Zeichencodierung Russisch

Jens Vetter vetter at creative-minds.de
Don Jan 22 08:54:32 CET 2004


Hi Lutz,

erstmal ganz herzlichen Dank für Deine große Mühe und die Zeit, die du 
investiert hast.

Es funktioniert ...

Ich habe ein Formular gebaut (mit Header utf-8 oder koi8-r), welches bei 
Eingabe und bei Weitergabe an MySQL den Header bekommt - und die Daten 
sind sauber.

Also erstes Problem gelöst.

Nur das zweite größere Problem, wie ich die Daten nun in eine Exceldatei 
bekomme steht immer noch offen.

Ich habe gerade auch den Header in Verbindung dem PEAR Excel 
Spread-Sheet probiert. Keine Chance.

Der Browser bekommt zur Darstellung jetzt seine UTF-8 Vorgabe, die Daten 
bleiben aber unkonvertiert.

Welche Möglichkeit gibt es denn jetzt, die Daten konvertiert an den 
Excel-Export weiter zu geben ?

Irgendeine Idee ... ?

Viele Grüße.

Jens.


Lutz Zetzsche schrieb:
> Hi Jens,
> 
> ich habe das Problem jetzt eingegrenzt und vermutlich geloest, wenn ich 
> nicht noch irgendetwas falsch verstanden habe. Und sollte ich die 
> Loesung gefunden haben, dann war ich die letzten zwei Tage mit meinen 
> Vermutungen schon verdammt nah an der Loesung. :-)
> 
> 
> Ich fasse noch einmal kurz zusammen:
> 
> 1. Du hast Daten in einer Excel-Tabelle, die in einem kyrillischen 
> Zeichensatz (z.B. koi8-r) formatiert sind.
> 
> 2. Die Daten werden in der MySQL-Datenbank im UTF-8-Format abgelegt.
> 
> 3. Wenn Du die Daten aus Excel kopierst, in ein phpMyAdmin-Formular 
> einfuegst und durch das Abschicken dieses Formulars in die 
> MySQL-Datenbank eintraegst, dann liegen die kyrillischen Zeichen als 
> Entities, also nicht roh in der Datenbank vor, was nicht gewuenscht 
> ist.
> 
> 4. Wenn Du die Daten aus Excel ueber das CSV-Format in die 
> MySQL-Datenbank exportierst und dabei ins UTF-8-Format konvertierst, 
> dann liegen die kyrillischen Zeichen roh, also nicht als Entities in 
> der Datenbank vor, was gewuenscht ist.
> 
> 5. Wenn Du Dir die unter 4. erwaehnten Daten von phpMyAdmin anzeigen 
> laesst, siehst Du zwar keine durch Entities dargestellten Zeichen, weil 
> die Zeichen nicht als Entities in der Datenbank abgelegt sind, aber 
> auch keine kyrillischen Zeichen, obwohl die Daten roh in der Datenbank 
> abgelegt sind.
> 
> 
> Meine Ausgangsvermutungen von gestern und heute:
> 
> 1. Es koennte ein Zeichensatz-Problem vorliegen, welches mit den 
> Zeichensatz-Angaben im PHP- oder HTML-Header (<meta 
> http-equiv="content-type" content="text/html; charset=...">) bzw. den 
> diesbezueglichen Server- und Browser-Einstellungen zu tun haben und 
> ueber die Korrektur dieser Angaben geloest werden koennte.
> 
> 2. Die Konvertierung der kyrillischen Zeichen in UTF-8-formatierte 
> Entities in dezimaler Schreibweise koennte durch den Browser beim 
> Abschicken des Formulars erfolgen, mit dem die Daten in die 
> MySQL-Datenbank eingetragen werden.
> 
> 3. Wenn die Konvertierung der kyrillischen Zeichen in UTF-8-formatierte 
> Entities erst beim Abschicken des Formulars durch den Browser erfolgen 
> sollte, koennte dies daran liegen, dass der Zeichensatz des 
> kyrillischen Textes nicht mit der Zeichensatz-Angabe in der HMTL-Seite, 
> in der das Formular ist, und in der verarbeitenden und ausgebenden 
> Seite uebereinstimmt, z.B. weil er iso-8859-1 ist.
> 
> 
> Ergebnis meiner Tests:
> 
> Meine Ausgangsvermutungen haben sich bestaetigt.
> 
> 
> 1.	Ich habe ein HTML-Formular mit einem Textfeld gebaut, in welches ich 
> einen kyrillischen Text aus Deiner Excel-Datei eingefuegt habe. Dieses 
> Formular habe ich an eine ausgebende PHP-Seite geschickt.
> 
> a)	Wenn ich in der Formular-Seite die Zeichensatzangabe <meta 
> http-equiv="content-type" content="text/html; charset=iso-8859-1"> 
> gemacht habe, haben der Internet Explorer und Mozilla die kyrillischen 
> Zeichen beim Abschicken des Formulars in die entsprechenden 
> UTF-8-formatierten Entities umgewandelt. Opera und Konqueror tun dies 
> nicht, so dass auf der anderen Seite nur noch Fragezeichen ankommen. 
> Die Zeicheninformationen sind also verloren gegangen.
> 
> b)	Wenn ich in der Formular-Seite die Zeichensatzangabe <meta 
> http-equiv="content-type" content="text/html; charset=utf-8"> gemacht 
> habe, hat KEINER der Browser die kyrillischen Zeichen beim Abschicken 
> des Formulars in die entsprechenden UTF-8-formatierten Entities 
> umgewandelt. Vielmehr sind die Zeichen auf der anderen Seite IMMER 
> UFT-8-formatiert angekommen. Die Zeicheninformationen sind also nie 
> verloren gegangen.
> 
> c)	Wenn ich in der Ausgabe-Seite die Zeichensatzangabe <meta 
> http-equiv="content-type" content="text/html; charset=iso-8859-1"> 
> gemacht habe, wurden die wie unter b) uebergebenen kyrillischen Zeichen 
> in allen Browsern kryptisch und damit falsch dargestellt.
> 
> d)	Wenn ich in der Ausgabe-Seite die Zeichensatzangabe <meta 
> http-equiv="content-type" content="text/html; charset=utf-8"> gemacht 
> habe, wurden die wie unter b) beschrieben uebergebenen kyrillischen 
> Zeichen in allen Browsern auch als solche und damit richtig 
> dargestellt.
> 
> 
> 2.	Die Angabe <meta http-equiv="content-type" content="text/html; 
> charset=..."> soll dem Server und dem Browser helfen, die jeweilige 
> HTMl-Ausgabe richtig zu interpretieren. Man kann jedoch in den 
> Browsereinstellungen den Zeichensatz der Seite fest vorgeben und damit 
> die Meta-Tag-Angabe "ueberschreiben". Dies hat bei mir auch 
> funktioniert.
> 
> 	Wenn ich in der Formular-Seite die Zeichensatzangabe <meta 
> http-equiv="content-type" content="text/html; charset=iso-8859-1"> 
> gemacht und im Browser fix UTF-8 als Zeichensatz vorgegeben habe, hat 
> KEINER der Browser die kyrillischen Zeichen beim Abschicken des 
> Formulars in die entsprechenden UTF-8-formatierten Entities 
> umgewandelt. Vielmehr sind die Zeichen auf der anderen Seite immer roh 
> UFT-8-formatiert angekommen.
> 
> 
> 3.	Ich habe nach diesen nicht ganz unerwarteten Ergebnisse dann 
> abschliessend phpMyAdmin heruntergeladen, installiert und geprueft.
> 
> a)	Auf der Startseite von phpMyAdmin kann man einen passenden 
> Zeichensatz auswaehlen, den phpMyAdmin dann auch auf den Seiten 
> verwendet.
> 
> b)	UTF-8 befindet sich NICHT unter den auswaehlbaren Zeichensaetzen.
> 
> 
> Loesung:
> 
> 1. Die Seiten, in denen sich die Formulare befinden, in welche Du die 
> kyrillischen Daten aus Excel einfuegst, muessen entweder die Angabe 
> <meta http-equiv="content-type" content="text/html; charset=utf-8"> im 
> Header besitzen oder mit der fixen Zeichensatz-Einstellung "UTF-8" im 
> Browser angezeigt werden, damit die Daten beim Abschicken der Formulare 
> nicht von einigen Browsern in Entities umgewandelt und von anderen 
> Browsern ins Nirvana befoerdert werden.
> 
> 2. Die Seiten, mit denen Du die Daten wieder aus der MySQL-Datenbank 
> anzeigst, muessen ebenfalls entweder die Angabe <meta 
> http-equiv="content-type" content="text/html; charset=utf-8"> im Header 
> besitzen oder mit der fixen Zeichensatz-Einstellung "UTF-8" im Browser 
> angezeigt werden, damit die Daten in kyrillischen Zeichen und nicht als 
> kryptische Zeichen angezeigt werden.
> 
> 3. Da phpMyAdmin UTF-8 als Zeichensatz nicht zur Auswahl anbietet, 
> kannst Du hier phpMyAdmin nur verwenden, wenn Du UTF-8 im Browser fix 
> als Zeichensatz einstellst. Du musst allerdings pruefen, ob phpMyAdmin 
> sich dann noch korrekt verhaelt, weil es diesen Zeichensatz selbst 
> nicht vorgesehen hat und phpMyAdmin auf einer differenzierten, internen 
> Zeichensatzverwaltung aufbaut.
> 
> 4. Sollte 3. nicht funktionieren, weil phpMyAdmin sich nicht mehr 
> korrekt verhaelt, wenn man mit dem Browser den Zeichensatz UTF-8 hart 
> vorgibt, dann bleibt nur noch das Programmieren einer eigenen 
> Pflegeoberflaeche fuer Deine Daten, wobei die Beachtung der 
> Loesungspunkte 1. und 2. ausreichen sollte. Oder Du suchst einen 
> phpMyAdmin-Ersatz, der bereits UTF-8 unterstuetzt. ;-)
> 
> 
> So. Das war es dann eigentlich schon. So sieht das doch eigentlich 
> wieder recht uebersichtlich und einsichtig aus. ;-)
> 
> Ich hoffe, meine Nachforschungen und die daraus resultierende Loesung 
> beheben auch tatsaechlich Dein Problem. Leider konnte ich es nicht bis 
> ins Ende nachstellen und nachvollziehen, weil dies dann doch zu 
> aufwendig geworden waere. :-)
> 
> 
> Viele Gruesse
> 
> Lutz
> 
> 
> 
> Am Mittwoch, 21. Januar 2004 10:40 schrieb Lutz Zetzsche:
> 
>>Hi Jens,
>>
>>ich habe gerade einmal einen Test gemacht und kyrillische Zeichen aus
>>der Excel-Tabelle, die Du mir und Norbert freundlicherweise per PM
>>zugaenglich gemacht hast, in ein textarea-Feld eines eMail-Formulars
>>kopiert und dann das Formular abgeschickt.
>>
>>Dabei hat sich mein Verdacht von heute Morgen erhaertet: Der Internet
>>Explorer und Mozilla, also die Browser, haben die kyrillischen
>>Zeichen in UTF-8-Entities umgewandelt. Beim Opera kamen hingegen auf
>>der Sendebestaetigungsseite keine Entities, sondern nur Fragezeichen
>>an.
>>
>>D.h. damit waere aus meiner Sicht schon einmal eingegrenzt, wo die
>>Entities her kommen. Es scheint also nicht an phpMyAdmin zu liegen
>>und eigene Formulare zu bauen, wuerde das Problem wohl ebenfalls
>>nicht loesen.
>>
>>Die Frage ist nun, WANN die beiden genannten Browser die kyrillischen
>>Zeichen in UTF-8-Entities umwandeln. Tun sie das bereits beim
>>Einfuegen der Zeichen in das Formularfeld, oder tun sie das erst beim
>>Abschicken? Das koennte ich allerdings erst heute Abend feststellen.
>>Bei ersterem haetten wir u.U. leider schlechte Karten, das Problem zu
>>loesen.
>>
>>Meine Vermutung ist, dass sie es erst beim Abschicken tun.
>>Hintergrund meiner Ueberlegung: Wenn Du einen Text aus Excel kopierst
>>und in der Zwischenablage hast, muss der Zeichensatz nicht unbedingt
>>UTF-8 sein. Zum Text koennte in der Zwischenablage aber noch der
>>urspruengliche Zeichensatz, z.B. iso-8859-5, abgelegt sein. Diese
>>Information koennte auch noch beim Einfuegen ins Textfeld vorhanden
>>sein. Wenn also die Umwandlung erst beim Abschicken erfolgt, koennte
>>dies daran liegen, dass der Zeichensatz des Textes mit dem
>>Zeichensatz der Seite, in der das Formular ist und mit dem
>>Zeichensatz in der verarbeitenden und ausgebenden Seite nicht
>>uebereinstimmt, z.B. weil er iso-8859-1 ist.
>>
>>Damit komme ich dann doch noch einmal auf meine Mail von gestern
>>zurueck, die sich auf falsche Zeichensatz-Angaben bezog, obwohl ich
>>spaeter dachte, die waere aufgrund eines Missverstaendnisses voellig
>>am Thema vorbei. Ansatzpunkte sind hier wie gesagt: Meta-Tag,
>>PHP-Header, Server- und Browser-Einstellungen.
>>
>>Allerdings koennte man auch genau anders herum vermuten: Wenn der
>>Text in ein Formularfeld einer Seite eingefuegt wird, deren
>>kyrillischer Zeichensatz nicht mit dem des einzufuegenden Textes
>>uebereinstimmt, wandelt der Browser die Zeichen bereits beim
>>Einfuegen ins Formularfeld um.
>>
>>Welche Vermutung zutrifft, ist u.U. sogar browserabhaengig! Opera
>>handhabt das Ganze ja auch anders, als die anderen beiden...
>>
>>Ein weiterer interessanter Ansatzpunkt: Du erwaehntest ja, dass Du
>>korrekt UTF-8-Zeichen siehst (und zurueckschreibst?), wenn Du Dir die
>>Daten mit phpMyAdmin direkt aus der Datenbank holst, die Daten also
>>nicht ueber Kopieren und Einfuegen in das Formularfeld gelangen.
>>
>>D.h. aus den obigen Vermutungen und Beobachtungen laesst sich eine
>>Versuchsreihe bauen, mit der Du eingrenzen kannst, wo das Problem
>>tatsaechlich liegt. Hier kann auch Javascript helfen, um z.B. den
>>Inhalt des Formularfelds nach dem Einfuegen auszulesen (ohne zu
>>versenden). Vielleicht kann man das Problem dann sogar am Ende nicht
>>nur lokalisieren, sondern auch loesen. Da mache ich mit heute Abend
>>einmal dran, wenn mir keiner zuvor kommt. :-)
>>
>>So, das war jetzt eine Menge Information, aber ich hoffe, sie ist
>>erstens verstaendlich, ist zweitens nicht an Deiner Intention vorbei
>>und hilft drittens weiter. ;-)
>>
>>
>>Viele Gruesse
>>
>>Lutz
> 
> 




php::bar PHP Wiki   -   Listenarchive