phpbar.de logo

Mailinglisten-Archive

[php] PHP mysql Sonderzeichen

[php] PHP mysql Sonderzeichen

Lutz Zetzsche Lutz.Zetzsche at sea-rescue.de
Don Mar 3 11:26:17 CET 2005


Hallo Manfred,

Manfred Jordan schrieb:
> hatte vor einiger Zeit bereits eine Frage diesbezüglich gestellt.  Das
> funktioniert jetzt zwar, aber leider nicht mit jedem Browser.
>
> folgenes habe ich gemacht:
> Also, hebräische Zeichen in Datenbank schreiben und wieder darstellen
> (mittels
> imagettftext). Datenbank läuft unter utf8, html-seite mit "<html
> lang='he'>
> und charset=windows-1250 erstellen und immer schön mit utf8_encode und
> utf8_decode die datenbank  schreiben und lesen.
>
> Mit dem Firefox unter SuSe-Linux klappt das wunderbar.
> Nun gibt es aber leider user die mit Windows2000 und dem IE5 bzw. 6
> arbeiten
> und da erscheinen in dem Bildchen nur ?
>
> Ich denke nun das das eigentlich gar nicht sein kann. Mein verständniß.
> Das
> Bild wird auf dem Server generiert. Wenn das Bild generiert wurde
> (passiert
> ja genau das gleiche, und zwar egal mit welchem browser ich da dran gehe)
> wird das gif an den client übergeben und dieser zeigt es an.
>
> Ich verstehe die Welt nicht mehr. :-(
>
> Warum Wird eine Grafik unterschiedlich angezeigt, wenn ich das Script,
> welches
> diese Grafik generiert mit unterschiedlichen browsern aufgerufen wird. Das
> kann doch nicht sein??!!
>
> Jemand ne Idee???
>
> Noch etwas in diesem Zusammenhang. ich denke das dies auch zu php gehört.
>
> Ich schreibe mittels php und utf8_encode ein hebräisches Zeichen in eine
> mysql
> datenbank die unter utf8 läuft. Also ein Zeichen. laut mysql Handbuch
> stellt
> mysql das intern als 3 Bytes dar. Wenn ich nun mit phpmyadmin in die
> datenbank reingucke, was sehe ich da? Da steht &#1502; drin. Somit nimmt
> dieses eine zeichen 7 Zeichen ein. Es gibt Sonderzeichen bei denen das
> nicht
> so ist, z.B. das tschechische z mit dem dach drauf, das steht als ein
> zeichen
> in der Datenbank.
>
> Nun, ich erwarte von php, daß wenn ich utf8_encode aufrufe, der String
> auch
> utf8 codiert wird, was offenbar nicht passiert.
>
> Vielleicht was dazu ja auch jemand was! Und ja, ich werde dieses problem
> auch
> an eine mysql-Liste schicken ..... nur ich denke das es mit PHP zu tun
> hat.

ich habe den Verdacht, daß der Fehler durch die Art der Übertragung der
Daten vom Browser zum Server auftritt. Es gibt gewisse Unterschiede
zwischen den Browsern, wie sie die Formulardaten übertragen, vor allem
wenn Du dem Browser Interpretationsspielraum läßt. Und der IE macht ja
sowieso alles anders als die anderen. ;-)

&#1502; ist die Entität für ein hebräisches Zeichen. Wenn also der IE
unter Windows z.B. die Entität überträgt, der Firefox unter Linux aber das
unmaskierte UTF-8-Zeichen, dann hast Du schon einen kleinen, aber
wichtigen Unterschied. Dann stehen nämlich je nach verwendetem Browser
unterschiedliche Dinge in Deiner Datenbank. Folglich ist auch die Ausgabe
im GIF unterschiedlich.

Du mußt also in Deiner Formularseite ansetzen, denke ich. Du mußt
sicherstellen, daß auf der PHP-/Serverseite immer dasselbe ankommt, gleich
welcher Browser verwendet wird.

Eine Sache, die ich ändern würde: Verwende nicht charset=windows-1250. Das
ist schonmal nicht plattformunabhängig. Warum nicht ISO oder direkt UTF-8?

Der entscheidende Ansatz für Dein Problem scheint mir folgender:

Da Du offensichtlich ein Formular an den Server abschicken läßt, welches
UTF-8-Daten enthält, solltest Du das im Formular auch angeben:

http://de.selfhtml.org/html/formulare/definieren.htm#zeichensaetze

Beispiel:

<form action="/cgi-bin/auswert.pl" method="get" accept-charset="UTF-8">
<!-- hier folgen die Formularelemente -->
</form>

Ich habe leider keine Zeit, das jetzt selbst auszuprobieren, aber ich
meine mich zu erinnern, daß Du hiermit der Lösung Deines Problems näher
kommen solltest.


Viele Grüße

Lutz


php::bar PHP Wiki   -   Listenarchive