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