Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi URLEncode und Unicode? (https://www.delphipraxis.net/122795-urlencode-und-unicode.html)

hitzi 22. Okt 2008 08:43


URLEncode und Unicode?
 
Hallo,

wie kann ich einen Unicodestring (Delphi 2009) so kodieren, dass er bei einer PHP Datei korrekt ankommt. Ich hab schon TIdURI.ParamsEncode() probiert, aber ein kurzer Test mit "öäü" stellt später auf der Webseite folgenden Text da: "oau".

Ist mein Ansatz richtig und der Fehler liegt an der Webseite und deren Verarbeitung oder muss ich in Delphi etwas anderes probieren?

Bernhard Geyer 22. Okt 2008 08:48

Re: URLEncode und Unicode?
 
Was kommt den aus ParamsEncode raus? Ich würde es Hex-Codieren.

Volle 22. Okt 2008 09:07

Re: URLEncode und Unicode?
 
hab mich vor kurzem mit genau der selben problematik beschaeftigt. allerdings in C++ mitm BDS 2006.

es gibt hier die Funktion UTF8Encode(). Ich weis aber net in wie weit es diese auch in Delphi gibt.
Schau mal ob du da was findest, wenn ja hilfts dir weiter.

Bbommel 22. Okt 2008 10:25

Re: URLEncode und Unicode?
 
Hallo Hitzi,

mir ist noch nicht so ganz klar, was du nun genau willst: Willst du einen string in ein Format für URLs codieren, wie du es in der Überschrift geschrieben hast (da hatte ich auch schon mal erfolglos was für in den Bordmitteln gesucht), oder soll eine php-Datei im UTF8-Format erstellt werden oder wie oder watt? :)

Es gibt jedenfalls auch in Delphi 2009 die Funktion UTF8Encode. Diese macht aus einem string (in D2009 also aus Unicode) einen UTF8-codierten String. Etwas fies (letztlich aber logisch) ist am Anfang nur der Ergebnistyp der Funktion, welcher ein "RawByteString" ist - wenn ich das richtig verstanden habe, ist das ein Stringtyp, der Delphi sagt, dass es nicht versuchen soll, diesen an verschiedene Zeichensätze oder so anzupassen, was ja auch richtig ist. Kann nur etwas lästig bei der Weiterarbeit sein...

Falls du einfach nur eine php-Datei im UTF8-Format schreiben willst, macht dir am einfachsten eine TStringList, in die du Zeile für Zeile alles reinschreibst und am Ende kannst du einmal
Delphi-Quellcode:
meineStringList.SaveToFile(filename,TEncoding.UTF8);
aufrufen.

Vielleicht hilfts ja, vielleicht war es aber auch völlig am Thema vorbei. Kommt drauf an, was du genau machen willst. ;)

Bis denn
Bommel

hitzi 23. Okt 2008 12:25

Re: URLEncode und Unicode?
 
Danke für die Antworten. Ich hab es über die Hexcodierung erledigt. Funktioniert mit unseren Umlauten ganz gut, aber sobald der ordinale Wert eines Zeichens im hexadezimalen Zahlenformat größer FF wird spinnt mein Server.
Ich hab es jetzt immer mit dem Zeichen "Ж" probiert. Dieses Zeichen besitzt den ordinalen Wert von 416 (Dezimal=1046). Der Server wandelt die geposteten variablen schon automatisch in das dezimale Format um. Funktioniert ganz gut solange der Zahlenwert die größer FF ist. Bei meinem Beispiel liefert der Server statt dem dezimalen Wert 1046 einfach A6 zurück.

Da das Problem nun eher in Richtung Webserver/PHP geht, werde ich das mal lieber in der anderen Sparte posten. Ist ja eh ne neue Frage.

[Edit]: Hier ist die Frage dazu: http://www.delphipraxis.net/internal...=955956#955956

Volle 23. Okt 2008 13:24

Re: URLEncode und Unicode?
 
Wie im anderen thread schon gesagt stimmt deine umwandlung noch nicht.

du wandelst einfach den HEX wert des ä's in ein %HEX um. das klappt so nicht.
Versuche mal mit der Funktion UTFbEncode() ein ä umzuwandeln.
dort wirst du 2 zeichen rausbekommen. und deren Hex wert musst du dann mit%HEX zusammenbauen.

ä -> ä
-> %C3%A4

und wenn du das an deinen webserver schickst dann wirds klappen.

du musst aber aufpassen!
es sind nicht immer 2 zeichen, es kann auch mal nur 1 zeichen (leerzeichen -> %20) oder mehrere zeichen sein (bis zu 4 da unicode 4 byte lang ist)

viel glueck

hitzi 23. Okt 2008 13:30

Re: URLEncode und Unicode?
 
Hmmm ... meinste wirklich ... die "öäü" werden doch aber korrekt auf dem Server dargestellt, wenn ich die übermittelte Variable in PHP mit utf8_encode($test) ausgebe. Nur eben das andere Zeichen wird vom Server falsch ans PHP übergeben -> siehe mein Edit im anderen Thread.

Volle 23. Okt 2008 13:34

Re: URLEncode und Unicode?
 
ich kann nur so viel sagen dass ich mich damit vor kurzem beschaeftigt hatte und es mit einem normalen "in hex wandeln" nicht ging.

wenn dus so machst wie ich es gemacht hatte klappt es ...
also entweder versuchst du es oder du ignorierst diesen fehler und suchst einen anderen woanders.
aber es gibt afaik nichts was dir aus %416 wieder ein zeichen macht.

geh einfach mal auf

www.google.de/ä.txt
aber mit dem internet explorer.

dann bekommste die meldung dass
www.google.de/%C3%A4.txt
nicht gefunden werden konnte.

mit dem firefox sieht es anders aus, der verwendet einen andernen, neueren, standart, welchen ich grad versuch zu implementieren ..

hitzi 23. Okt 2008 13:48

Re: URLEncode und Unicode?
 
Danke :thumb:

Ich hab die Codierung jetzt so geändert, wie du es vorgeschlagen hast und siehe da, ich muss auf der PHP Seite noch nicht einmal was konvertieren. Da hatte ich es mir ja mal wieder viel komplizierter gemacht.

Volle 23. Okt 2008 13:55

Re: URLEncode und Unicode?
 
bitte bitte :P

wenn du dich um die sog. Punycode implementierung kuemmern willst dann kannst du hier nachlesen wie das geht:

http://tools.ietf.org/html/rfc3492

is aber auf jeden fall komplizierter wie das normale umbennen und ist eignetlich auch nur notwendig um was gegen phishing zu tun, was bei dir im programm ja wahrscheinlich unnoetig sein wird.


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:58 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz