Encoding Problem beim Schreiben in Datenbank
Tim B.
- php
Hallo zusammen,
ich habe folgendes Problem:
Aus einer mir vorliegenden Excel Tabelle (.xls) möchte ich einzelne Zelldaten auslesen, ausgeben und in eine Datenbank schreiben lassen. Dabei bereiten mir gewisse Umlaute und Sonderzeichen Probleme
Das Auslesen und Ausgeben funktioniert zwar, jedoch landen in der Datenbank nur kryptische Werte. Steht in einer Zelle beispielsweise ein Trademark Symbol, so wird es richtig als ™ auf der Seite angezeigt, in der Datenbank steht dann jedoch der Wert ™
Das kuriose an der Sache ist allerdings: Wenn ich NICHT den Wert aus der Zelle nehme sondern das Trademark Symbol direkt in den String für die mysql_query() Methode schreibe funktioniert es und auch der Wert in der Datenbank stimmt.
Ich habe die Excel Datei auch extra mit UTF-8 Kodierung abgespeichert, was jedoch ebenfalls nichts gebracht hat. Wenn es ein direktes Problem mit der Tabelle wäre verstehe ich auch nicht, weshalb ich auf der Seite dann dennoch den korrekten Wert ausgegeben bekomme... und letztendlich speichere ich diesen Wert ja auch in einen String und übergebe ihn der SQL Methode...
Tja, man sieht ich bin etwas verwirrt und komme an der Stelle einfach nicht weiter.
Für jeden hilfreichen Tip bin ich sehr dankbar!
Hi!
Aus einer mir vorliegenden Excel Tabelle (.xls) möchte ich einzelne Zelldaten auslesen, ausgeben und in eine Datenbank schreiben lassen. Dabei bereiten mir gewisse Umlaute und Sonderzeichen Probleme
Wie sieht das aus, was aus der Excel-Tabelle kommt? Ausgeben am besten mit echo urlencode(...), dann siehst man am besten, wie Sonderzeichen kodiert sind.
Das Auslesen und Ausgeben funktioniert zwar, jedoch landen in der Datenbank nur kryptische Werte. Steht in einer Zelle beispielsweise ein Trademark Symbol, so wird es richtig als ™ auf der Seite angezeigt, in der Datenbank steht dann jedoch der Wert ™
Wie sieht das aus, was aus der Excel-Tabelle kommt? Wenn du nichts damit machst und im DBMS ™ landet, dann wird das wohl so aus der Excel-Datei kommen.
Das kuriose an der Sache ist allerdings: Wenn ich NICHT den Wert aus der Zelle nehme sondern das Trademark Symbol direkt in den String für die mysql_query() Methode schreibe funktioniert es und auch der Wert in der Datenbank stimmt.
Was ist daran kurios, dass Daten so im System landen, wie sie dort hingesendet werden?
Wenn es ein direktes Problem mit der Tabelle wäre verstehe ich auch nicht, weshalb ich auf der Seite dann dennoch den korrekten Wert ausgegeben bekomme...
Wohin schaust du? Auf das was dir der Browser zeigt oder in den Quelltext der Seite? Dass der Browser statt ™ ein ™ zeigt, ist soweit normal.
Tja, man sieht ich bin etwas verwirrt und komme an der Stelle einfach nicht weiter.
Der erste Schritt zum Entwirren ist genaues Hinschauen und Kontrollausgaben machen.
Lo!
Ah ok, ich habe mich mehr auf meine Testausgaben verlassen und noch gar nicht daran gedacht, in den Seitenquelltext zu schauen. Dort steht dann auch in der Tat wieder ™ anstatt ™.
Mit urlencode() wird mir das Zeichen als 26trade angezeigt.
Ok, an der Stelle würde mir dann also eine Methode fehlen, die codierten Zeichen so umzuwandeln, dass sie auch korrekt in die Datenbank geschrieben werden können. str_replace wäre wohl eine Möglichkeit, dafür müsste ich allerdings vorhersehen, welche Zeichen alle in der Tabelle auftauchen können und das sind leider einige.
Gibt es da eine bessere Alternative?
@@Tim B.:
nuqneH
Ok, an der Stelle würde mir dann also eine Methode fehlen, die codierten Zeichen so umzuwandeln, dass sie auch korrekt in die Datenbank geschrieben werden können.
Die Frage ist: Warum wird aus '™' überhaupt '™
'? Wie liest du die Daten aus Excel aus? Wie schreibst du sie in die Datenbank?
Qapla'
Hi!
Ah ok, ich habe mich mehr auf meine Testausgaben verlassen und noch gar nicht daran gedacht, in den Seitenquelltext zu schauen. Dort steht dann auch in der Tat wieder ™ anstatt ™.
Mit urlencode() wird mir das Zeichen als 26trade angezeigt.
Das % nicht unterschlagen, das gehört zur URL-Kodierung. (Die Funktion ist eigentlich nicht für Debugging gedacht, aber ihr Ergebnis liest sich angenehmer als das von bin2hex().)
Ok, an der Stelle würde mir dann also eine Methode fehlen, die codierten Zeichen so umzuwandeln, dass sie auch korrekt in die Datenbank geschrieben werden können.
Was genau liest du da? HTML-Code? Wenn ja, kannst du Entities und NCRs mit html_entity_decode() rückgängig machen.
Lo!