Zeichenkodierung
wh!te
- php
Hallo ihr lieben,
ich habe folgendes Problem, mit dem ich mich an euch wenden möchte: Ich habe mittels Javascript eine Verschlüsselung programmiert, funktionsweise davon ist hier jetzt egal. Jedenfalls wird damit aus "selfhtml" bspw "ĵĝĞĝĜĵįĤ". So. Die Verschlüsselung an sich funktioniert super und es lässt sich auch problemlos wieder entschlüsseln.
Jetzt habe ich aber etwas neues ausprobiert, und will den verschlüsselten Text in meiner DB speichern - ein Empfänger bekommt dann einen Link, mit dem er auf den Text zugreifen und ihn entschlüsseln kann. Sinn und Zweck sind dabei unerheblich ;)
Problem ist jetzt: Da komme ich mit der Zeichenkodierung durcheinander. Zuerst hatte ich alle Seiten mit dem normalen ISO-Satz kodiert. Angezeigt wurde mir auch alles korrekt. Aber ... es kam nix vernünftiges mit der DB raus, die Hälfte waren Fragezeichen (?) ;)
Dann hab ich ein wenig mit UTF8 hin- und herprobiert und jetzt kommt immerhin etwas vernünftiges raus, nur Sonderzeichen und Zahlen sind nicht richtig. Wie das jetzt genau aussieht kann ich aus dem Kopf nicht genau sagen, hab keinen Überblick mehr wo welche Kodierung ist :(
Kann mir wer sagen, wie man sowas am Besten lösen kann? Mit den Kodierungen mit SQL und so kenne ich mich nicht so gut aus.
Achso, was mir noch einfällt: bei allem mit ISO war der Text richtig in der DB, aber es wurde iwie net richtig ausgelesen, weiß net wo da der Hase im Pfeffer liegt.
Hoffe mir kann wer helfen
(: Danke schonmal im Voraus :)
Hello,
die Grundregel lautet eigentlich nur:
Du musst es in derselben Codierung rausholen, mit der Du es reingetopft hast.
Um den Überblick zu erhalten, müsstest Du ein Codierungsdiagramm erstellen. Dieses müsste auf alle (Um-)Codierungen Rücksicht nehmen.
In welcher Codierung wird die Seite vom Server zum Browser gesendet?
Wird dann nach der Bearbeitung im Browser etwas umcodiert, z.B. durch Request per XHTTP?
In welcher Codierung findet der anschließende (POST-)Request statt?
Was macht der HTTP-Server anschließend mit dem Datenstrom?
Welche Codierung ist für die Connection API<->DBMS gewählt worden?
Welche Codierung wurde für die Tabellen gewählt?
usw.
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg
okay, aber wo liegt nun der Fehler? In welchem Format muss ich das in der DB speichern? Außer ISO und UTF kenne ich keine Formate (und ISO gibts ja so net in SQL), weiß net, was ich da dann nehmen soll/muss ... Weil ich hatte ja wie gesagt vorher alle Seiten in ISO und das Feld in der DB dann in UTF - beim auslesen waren dann nur Fragezeichen *scratch*
Hi!
okay, aber wo liegt nun der Fehler? In welchem Format muss ich das in der DB speichern? Außer ISO und UTF kenne ich keine Formate
Du verwendest gemäß deinem Beispiel Zeichen, die nicht in ISO-8859-1 enthalten sind, also wirst du wohl mit UTF-8 am besten bedient sein.
(und ISO gibts ja so net in SQL),
ISO-8859-1 heißt bei MySQL Latin1 (Latin1 ist aus MySQL-Sicht eigentlich Windows-1252).
Lo!
Oh mein Gott ... ich muss mich echt bei dir entschuldigen! Das ist alles nur ein Tippfehler! Da ich das ganze an verschiedenen PCs gemacht habe, habe ich scheinbar beim Upload einen Fehler gemacht, da fehlt einfach ein Bindestrich bei utf-8. Tut mir echt Leid, dass du dir da wegen mir Gedanken gemacht hast.
Aber Danke!!
Hi!
Dann hab ich ein wenig mit UTF8 hin- und herprobiert und jetzt kommt immerhin etwas vernünftiges raus, nur Sonderzeichen und Zahlen sind nicht richtig. Wie das jetzt genau aussieht kann ich aus dem Kopf nicht genau sagen, hab keinen Überblick mehr wo welche Kodierung ist :(
Kann mir wer sagen, wie man sowas am Besten lösen kann? Mit den Kodierungen mit SQL und so kenne ich mich nicht so gut aus.
Naja, du musst dir den Überblick wieder verschaffen. Das kannst nur du, denn dir liegt aller relevanter Code vor. Ich kann dir ohne weitere Kenntnis dessen, was du da konkret machst, nur allgemein raten, erst einmal grundsätzlich und im Klartext UTF-8 fehlerfrei mit dem DBMS zu kommunizieren. Als Lektüre hab ich da mal was vorbereitet: SELFHTML-Wiki - Themenschwerpunkt Zeichenkodierung, insbesondere den Abschnitt über Datenbanksysteme, aber auch das Wechselspiel Webserver - Browser spielt eine Rolle, denn darüber zeigst du dir die Daten ja an. Zur Kontrolle, welche Kodierung vorliegt, kann man urlencode() missbrauchen. Damit sieht man schön, ob ein Byte oder zwei für einen Umlaut verwendet werden, und kann damit auf die beiden relevanten Kodierungen ISO-8859-1 und UTF-8 schließen (zur Not mit einer der vielen verfügbaren Zeichentabellen vergleichen).
Lo!