Autor Beitrag
zongo-joe
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 134

win xp prof
D3, D4, D7
BeitragVerfasst: Mi 23.04.08 09:25 
Moin zusammen,
also ich habe folgendes Problem:
Ich möchte Freischaltcodes für eine Software online erstellen und verschicken. Die werden dann im Programm in einen Fenster eingegeben und das Programm dann freigeschaltet.

Auf der Website (UTF- 8 ) verschlüssele ich mit PHP (Datei auch in UTF- 8 ) einen kurzen Text mit einem einfachen Cäsar-Algorithmus, so etwa chr = chr ( ord (chr () + 3)). Dann gebe ich diesen neuen String mit ECHO in einem Textfeld auf einer neuen Website aus (die hat auch den charset utf-8 ).
Wenn ich diesen String mit kopieren/einfügen in ein Delphi-Editfeld kopiere, dann wird der String von Delphi nach dem gleichen Algorithmus wie oben zurückübersetzt, um den ursprünglichen Wert zu bekommen.
Klappt auch alles wunderbar, nur wenn Umlaute auftreten dann funzioniert das nicht.

Ich habe schon ne Menge rumprobiert aber es will einfach nicht...

Weiss einer Rat ?

Gruß,
Zongo
Klabautermann
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Veteran
Beiträge: 6366
Erhaltene Danke: 60

Windows 7, Ubuntu
Delphi 7 Prof.
BeitragVerfasst: Mi 23.04.08 12:11 
Hallo,

auf PHP Ebene kannst du mit utf8_becode verhindern das es entsprechend Codiert verschickt wird. Auf Delphi Seite müsste das mit Utf8ToAnsi zu erreichen sein. Bei größeren Datenmengen (also mehr als nur einer Information) könnte es auch Sinn machen die sachen als XML zu übermitteln, dann kümmert sich nämlich der Parser um die Kodierung.

Ich möchte dir übrigens Dringend zu einer anderen Verschlüsselungsmetode raten. Wenn du auf deinem Server die mcrypt Bibliothek aktiviert hast kannst du z.B. AES einsetzen, was die Sicherheit der Übertragung drastisch ansteigen lassen sollte.

Gruß
Klabautermann
zongo-joe Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 134

win xp prof
D3, D4, D7
BeitragVerfasst: Mi 23.04.08 21:46 
sry, war afk (kommt leider häufiger mal vor)

Ich habs nochmals so probiert, aber es funktioniert nicht.
Was komisch ist:
egal, ob ich im HEAD Teil charset=ISO-8859-1 oder charset=utf-8 angebe, die vom PHP Script erzeugte Website wird von
Firefox und IE immer als UTF-8 erkannt.
Auch wenn ich die Codes mit STRG-C und STRG-V in Delphi kopiere, werden die Umlaute falsch dargestellt, und UTF8toANSI ändert an dem Text nix.

/Edit: ich habe noch ein bischen rumprobiert: es ist ganz egal, ob ich auf einen String in einem Editfeld UTF8DECODE(), UTF8ENCODE(), UTF8toANSI oder ANSItoUTF8 anwende, die Zeichen bleiben immer unverändert...

Ich glaube irgendwas grundlegendes hab ich da noch nicht kapiert...

Gruß,
Zongo

P.S. die Cäsar-Verschlüsselung halte ich in diesem Fall für ausreichend, da der Code eh noch mit mehreren Bezügen innerhalb des Codes (Summen von Ascii-Werten und so) abgesichert ist, von daher würde auch eine Cäsar-Entschlüsselung nicht viel bringen. Sonst gebe ich Dir natürlich Recht mit dem Verschlüsselungsverfahren.
Klabautermann
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Veteran
Beiträge: 6366
Erhaltene Danke: 60

Windows 7, Ubuntu
Delphi 7 Prof.
BeitragVerfasst: Do 24.04.08 00:00 
Hi,

da du leider keine Quelltexte gepostet hast und ich deine PHP & Delphi Kenntnisse nicht wirklich einschätzen kann kann ich nur spekulieren. Also entschuldige bitte, falls das jetzt zu simpel gedacht ist. Aber wie schreibst du den Umgewandelten Text in das Edit-Feld?

Es ließt sich so, als würdest du etwas wie das hier machen: UTF8TOANSI(Edit1.Text); und dabei vergessen das Ergebnis der Funktion wieder auf das Edit Feld zu zu weisen. Richtig müsste das so aussehen: Edit1.Text := UTF8TOANSI(Edit1.Text);.

Gruß
Klabautermann
zongo-joe Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 134

win xp prof
D3, D4, D7
BeitragVerfasst: Do 24.04.08 15:06 
Hi,
erstmal vielen Dank, dass Du dich auch nachts mit diesem verworrenen Problem beschäftigst.
Ich habe jetzt eine vorübergehende Lösung mit einem (zugegeben brachialen) Workaround gefunden, ich ersetze die falschen Umlaute durch die chr() der ASCII-Werte der ISO-Codierung. Nicht schön, aber es klappt.

Nur zur Info: mit PHP ghabe ich wenig gemacht, mit Delphi zwei kleine bis mittlere kommerzielle Projekte.

Um zu einer richtigen Lösung zu kommen, muss ich das mal richtig kapieren. Jetzt habe ich noch im www gesucht, aber insgesamt nix gefunden, was die Sache so richtig erklärt. Könntest Du mir noch ein paar Fragen beantworten, wenn das ohne großen Aufwand geht ?
Stimmt das so, wie ich mir das zusammengereimt habe:
a) UTF-8 ist der Standard im www
b) die Codierung für Websites stelle ich im Webeditor ein
c) verschiedenen Codierungenkann man in einem .html-Dokument nicht mischen
d) der Browser erkennt die Codierung automatisch
e) wenn ich aus einer UTF-8 Website Daten an einen Server poste und mit PHP weiterverarbeite, ist dann die Codierung von der abschickenden Website oder vom annehmenden Server abhängig ?
f) wenn ich gepostete UTF-8 Daten mit einem PHP-script bearbeiten will, zB str_replace("ä","ae",var), dann muss das Script selber auch in UTF-8 codiert sein
g) bei einfachen Operationen wir ORD() ist das nicht nötig
h) wenn das PHP-Script daten sendet, dann ist Serverseitig festgelegt, mit welcher Codierung die gesendet werden
i) gibt es einen PHP-befehl um das zu ändern,ohne dass man bei jedem ECHO immer UTF8_DECODE() verwenden muss ?
j) ist das bei EMails die mit MAIL() versandt werden genauso ?
k) ist die Codierung bei den Editfeldern in Delphi festgelegt (ich meien eine Voreinstellung, nicht Befehlel wie UT8toANSI)? Wenn ich UTF-8 Daten kopiere, werden die in den Edits von zwei unterschiedlichen Progs auch anders angezeigt, speziell die umlaute.
l) kennst Du ein gutes Tutorial dazu ?

Sind ne Menge Fragen, aber hoffentlich kurz zu beantworten; wenn das zuviel Aufwand ist, einfach kurze Notiz.
Gruß und schonmal Danke,
Zongo
Heiko
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3169
Erhaltene Danke: 11



BeitragVerfasst: Fr 25.04.08 09:46 
user profile iconzongo-joe hat folgendes geschrieben:
a) UTF-8 ist der Standard im www

Nein. UTF-8 kam erst in den letzten Jahren auf, als die asiatischen Räume im Netz erstarkten. Von daher gibt es de facto keinen Standardzeichensatz.

user profile iconzongo-joe hat folgendes geschrieben:
b) die Codierung für Websites stelle ich im Webeditor ein

Jain. Du musst im Editor den gleichen Zeichensatz eingestellt haben, wie es der "Charset-Tag" im HTML(/XML)-Code angibt.

user profile iconzongo-joe hat folgendes geschrieben:
c) verschiedenen Codierungenkann man in einem .html-Dokument nicht mischen

Japp. Zu beachten ist aber, dass der IE Formulare als ISO absendet, obwohl das Dokument auf UTF-8 eingestellt ist. Da musst du die Formulare auch auf UTF-8 umstellen.

user profile iconzongo-joe hat folgendes geschrieben:
d) der Browser erkennt die Codierung automatisch

Jain. Normalerweise sollten die sich an den charset im XML orientieren. Allerdings können die Browser meistens auch zwischen ISO und UTF-8 unterscheiden, da die ersten zwei Bytes einer Datei eine Datei als UTF-8 markieren können. Allerdings kann der Browser nur durch "raten" erkennen, um welchen ISO-Standard es sich handelt. Von daher immer im XML angeben, um welche Kodierung es sich handel soll!

user profile iconzongo-joe hat folgendes geschrieben:
e) wenn ich aus einer UTF-8 Website Daten an einen Server poste und mit PHP weiterverarbeite, ist dann die Codierung von der abschickenden Website oder vom annehmenden Server abhängig ?

Der Skript hat keine Ahnung, in welchem Format die Daten ankommen. Darum musst du dich dann selber kümmern.

user profile iconzongo-joe hat folgendes geschrieben:
f) wenn ich gepostete UTF-8 Daten mit einem PHP-script bearbeiten will, zB str_replace("ä","ae",var), dann muss das Script selber auch in UTF-8 codiert sein

Nein. Der Skript muss lediglich in UTF-8 geschrieben sein, wenn du dort Zeichen drin hast, die als UTF-8 ausgegeben werden sollen (z.B. echo "Да"). Ansonsten ist die Kodierung egal, da die Strings ja in Variablen gespeichert sind und diese unabhängig vom Code sind. Übrigens kann IMHO str_replace lediglich ANSII und nicht UTF-8. Du musst mal bei php.net in die Diskussion reinschauen. Dort gibt es oftmals hinweise dazu.

user profile iconzongo-joe hat folgendes geschrieben:
g) bei einfachen Operationen wir ORD() ist das nicht nötig

Bereits bei f beantwortet (ist egal).

user profile iconzongo-joe hat folgendes geschrieben:
h) wenn das PHP-Script daten sendet, dann ist Serverseitig festgelegt, mit welcher Codierung die gesendet werden

Wie bereits oben geschrieben, hängt es von deiner XML-Seite ab.

user profile iconzongo-joe hat folgendes geschrieben:
i) gibt es einen PHP-befehl um das zu ändern,ohne dass man bei jedem ECHO immer UTF8_DECODE() verwenden muss ?

Tja, UTF-8 hat eben auch seine Nachteile ;-).

user profile iconzongo-joe hat folgendes geschrieben:
j) ist das bei EMails die mit MAIL() versandt werden genauso ?

Jede E-Mail hat einen Header in der du die Kodierung angeben kannst. Ansonsten ist es das gleiche, als wenn du eine HTML-Seite ausgibst.

user profile iconzongo-joe hat folgendes geschrieben:
k) ist die Codierung bei den Editfeldern in Delphi festgelegt (ich meien eine Voreinstellung, nicht Befehlel wie UT8toANSI)? Wenn ich UTF-8 Daten kopiere, werden die in den Edits von zwei unterschiedlichen Progs auch anders angezeigt, speziell die umlaute.

Die Standardkompos von Delphi können nur ANSII. Sie sind nicht UTF-8 kompatibel!!! Dazu brauchst du dann die TNT-Komponenten.

Gruß
Heiko
Klabautermann
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Veteran
Beiträge: 6366
Erhaltene Danke: 60

Windows 7, Ubuntu
Delphi 7 Prof.
BeitragVerfasst: Fr 25.04.08 10:07 
Hi,

um ehrlich zu sein ich sehe bei vielen Punkten die Frage nicht.

Generell bleibt aber zu sagen, dass Delphi noch immer keine anständige Unicode Unterstützung bietet. Diese soll mit der für das nächste Halbjahr angekündigte Delphi Version Tiburón kommen daher kannst du da auch in keinem Edit Feld oder ähnlichen etwas entsprechendes einstellen. In diesem Punkt hinkt Delphi der Entwicklung um Jahre hinterher.

Das heißt dann auch alles was du momentan machen kannst ist manuelles rum gemurkste. Wenn die Delphi Befehle (UTF8toANSI)dir nicht helfen könntest du noch in anderen Quellen, z.B. der jcl nach Lösungen suchen.

Gruß
Klabautermann
zongo-joe Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 134

win xp prof
D3, D4, D7
BeitragVerfasst: Fr 25.04.08 20:58 
Vielen Dank Euch für die Mühe, hat mir sehr weitergeholfen !
Jetzt habbich mal ne Grundlage, mit der sich arbeiten lässt. :D
Gruß,
zongo
Vladimi
Hält's aus hier
Beiträge: 1



BeitragVerfasst: Mo 19.05.08 12:59 
Hallo,

falls das Problem noch aktuell ist:

Zitat:
h) wenn das PHP-Script daten sendet, dann ist Serverseitig festgelegt, mit welcher Codierung die gesendet werden
i) gibt es einen PHP-befehl um das zu ändern,ohne dass man bei jedem ECHO immer UTF8_DECODE() verwenden muss ?


Die Codierung einer Webseite bestimmst du im Header einer PHP Ausgabe. Dieser muss immer als erstes ausgegeben werden, ansonsten setzt PHP dies automatisch:

ausblenden Quelltext
1:
header('content-type: text/html; charset=utf-8');					


Dies bestimmt, wie der Browser die Daten interpretiert und anzeigt. In diesem Fall verwendet der Browser utf-8 zum anzeigen. Dies ist das, was du z.B. im Firefox unter Ansicht-->Zeichencodierung auch manuell einstellen kannst.

Wie die Daten letztlich vorliegen, bestimmt die Datenquelle, aus der die Daten kommen. Wenn du ein Dokument unter Windows im Editor als ANSI speicherst und dies dann als Webseite UTF-8 codiert ausgibst, wirst du vermutlich nur Fragezeichen als Ausgabe bekommen, da die Daten iso-8859-1 codiert vorliegen:

z.B.

ausblenden Quelltext
1:
2:
3:
4:
<?php
header('content-type: text/html; charset=utf-8'); // darstellung ist utf-8
echo "öüäÜÄÖ"; // ausgabestring ist iso-8859-1
?>


Lösen tust du das Problem entweder, indem du die Codierung der Datenquelle änderst, oder, die Interpretation des Browsers änderst. z.B.:

ausblenden Quelltext
1:
2:
3:
4:
<?php
header('content-type: text/html; charset=iso-8859-1'); // darstellung ist iso-8859-1
echo "öüäÜÄÖ"; // ausgabestring ist iso-8859-1
?>


Alternativ kannst du auch die Daten in UTF-8 umwandeln und ausgeben:

ausblenden Quelltext
1:
2:
3:
4:
<?php
header('content-type: text/html; charset=utf-8'); // darstellung ist utf-8
echo utf8_encode("öüäÜÄÖ"); // ausgabestring ist utf-8
?>


Falls die Zeichen im PHP-Source utf-8 encoded sind, das ganze natürlich analog mit umgekehrt.

MfG

Moderiert von user profile iconKlabautermann: Code-Tags hinzugefügt.
Heiko
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3169
Erhaltene Danke: 11



BeitragVerfasst: So 25.05.08 18:27 
Ach btw.: wenn ich es richtig interpretiere hat PHP 6 dann ne richtige UniCode-Unterstützung ;)
zongo-joe Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 134

win xp prof
D3, D4, D7
BeitragVerfasst: Mo 26.05.08 21:57 
Danke nochmal, hilft mir sehr !
Gruß,
zongo