HTTP - URLEncode
Übersicht

![]() |
Der EisvogelBetreff: HTTP - URLEncode |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallo,
ich stehe grad in einer Krise und will mal wieder meinen Rechner aus dem Fenster schmeißen. Ich schicke einen HTTP Request an meinen Server. Diese Request beinhaltet Sonderzeichen wie z.B. ein "Ö". Um diese Sonderzeichen sicher zum Server zu bringen, verwende ich folgende Funktion: BlitzMax: [AUSKLAPPEN] Function URLEncode:String(str:String) Aus meinen "Ö" wird jetzt "%D6". Wenn mein Server jetzt diesen Request bekommt, und cih versuche die Daten aus dem Request zu verarbeiten, dann kotzt er mich regelrecht mit Fehlern voll. Also habe ich mich schlau gemacht und mal geguckt was Firefox denn aus diesen "Ö" macht, und sieh da nix mit "%D6". Firefox macht daraus ein "%C3%96". Wie kommt Firefox darauf? Ich hab schon im Internet gesucht, jedoch habe ich keine Methode gefunden die das selbe Ergebnis wie Firefox bekommt. Ich bin ein wenig am verzweifeln, weil ich diese doofe "Ö" und auch die anderen Sonderzeichen zum Server bekommen muss, ohne dass mir dieser Fehler ausgibt. MfG Der Eisvogel |
||
Ungarische Notation kann nützlich sein.
BlitzMax ; Blitz3D Win 7 Pro 64 Bit ; Intel Core i7-860 ; 8 GB Ram ; ATI HD 5750 1 GB Projekte: Window-Crasher Ich liebe es mit der WinAPI zu spielen. |
![]() |
Jolinah |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallo Eisvogel,
Deine Funktion wandelt die Zeichen basierend auf ASCII um. %C3%96 ist die Unicode/UTF8-Repräsentation mit 2 Bytes für ein Zeichen. Man müsste also "einfach" die 2 Bytes eines Zeichens nehmen und diese Bytes in Hex umwandeln. In der Praxis ist es wohl in BMax etwas schwieriger. Allerdings versteh ich nicht ganz wieso das beim Server nicht auch mit %D6 klappen sollte, aber das hängt wohl letztlich auch von der Server-Software ab. Machst du einen POST- oder GET-Request? Bei POST müsste das ja ungefähr so aussehen: Code: [AUSKLAPPEN] param1=%D6sterreich¶m2=abc
Und dann in PHP z.B. Code: [AUSKLAPPEN] $param1 = urldecode($_POST['param1']);
Falls das PHP nicht sowieso schon decodiert in $_POST ablegt. |
||
![]() |
Der Eisvogel |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallo Jolinah,
ok, PHP legt die Daten immer schon decodiert ab. Was mich eben auch wundert, dass der Server das nicht aktzeptiert. Woher weiß Firefox, dass der Server das ganze in UTF8 habe will? Oder ist das irgendwie genormt, dass man HTTP Requests mit UTF8 macht? Zur Frage ob mit GET oder POST, bei beiden klappt es mit %D6 nicht. Es kommen immer kryptische Zeichen an, die der Server, frag mich nicht warum, nicht verarbeiten kann, und schon garnicht in eine Datenbank eintragen kann, obwohl der String escaped wurde. Naja, ich mach mich jetzt mal schlau wie ich von ASCII zu UTF8 komme, und vielleicht wird ja dann irgendwann aus meinem "Ö" ein "%C3%96". MfG Der Eisvogel |
||
Ungarische Notation kann nützlich sein.
BlitzMax ; Blitz3D Win 7 Pro 64 Bit ; Intel Core i7-860 ; 8 GB Ram ; ATI HD 5750 1 GB Projekte: Window-Crasher Ich liebe es mit der WinAPI zu spielen. |
jsp |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Zitat: Naja, ich mach mich jetzt mal schlau wie ich von ASCII zu UTF8 komme...
Blitzmax hat ja String.FromUTF8String() und ToUTF8String() Kann mich dunkel daran erinnern das FromUTF8String als Methode einfach den String umwandelt aber ToUTF8String wird glaub ich nur intern benutzt, aber du könntest dir ja den code raussuchen. Ein URL Encode und Decode gibt es auch hier: http://www.blitzmax.com/codear...code=1581. |
||
Logic Gui Professional a Gui Designer for MaxGui |
![]() |
Der Eisvogel |
![]() Antworten mit Zitat ![]() |
---|---|---|
Vielen Dank jsp! Das hat mir die Arbeit ersparrt das ganze von Hand umzuwandeln. Jetzt funktioniert alles perfekt. Danke!
MfG CrazyBox |
||
Ungarische Notation kann nützlich sein.
BlitzMax ; Blitz3D Win 7 Pro 64 Bit ; Intel Core i7-860 ; 8 GB Ram ; ATI HD 5750 1 GB Projekte: Window-Crasher Ich liebe es mit der WinAPI zu spielen. |
![]() |
BtbN |
![]() Antworten mit Zitat ![]() |
---|---|---|
Du gibst das encoding im header Content-Type mit an, wenn es fehlt, nimmt der server einfach irgendwas an. | ||
![]() |
Der Eisvogel |
![]() Antworten mit Zitat ![]() |
---|---|---|
Danke BtbN. Auf Wikipedia habe ich in diesem Atemzug folgendes gefunden:
Code: [AUSKLAPPEN] Content-Type: application/x-www-form-urlencoded; charset: UTF-8
Jedoch bezieht sich das nur auf Daten die per POST gesendet werden. Wie aber verhält sich das mit den Daten, die per GET gesendet werden? MfG Der Eisvogel |
||
Ungarische Notation kann nützlich sein.
BlitzMax ; Blitz3D Win 7 Pro 64 Bit ; Intel Core i7-860 ; 8 GB Ram ; ATI HD 5750 1 GB Projekte: Window-Crasher Ich liebe es mit der WinAPI zu spielen. |
![]() |
Propellator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Sollte genau gleich sein. | ||
Propellator - Alles andere ist irrelephant.
Elefanten sind die Könige der Antarktis. |
![]() |
Der Eisvogel |
![]() Antworten mit Zitat ![]() |
---|---|---|
Was heißt das? Der Content-Type gilt nur für angehängte Daten, wie z.B. die POST Daten, aber nicht für GET Daten. | ||
Ungarische Notation kann nützlich sein.
BlitzMax ; Blitz3D Win 7 Pro 64 Bit ; Intel Core i7-860 ; 8 GB Ram ; ATI HD 5750 1 GB Projekte: Window-Crasher Ich liebe es mit der WinAPI zu spielen. |
![]() |
Jolinah |
![]() Antworten mit Zitat ![]() |
---|---|---|
Irgendwo hab ich gelesen, dass wenn nichts definiert wurde, ISO-8859-1 angenommen wird (Unicode). Andererseits denke ich, dass Content-Type schon auch für die GET Uri zuständig sein müsste, und nicht nur für das Entity (die Daten). Die Uri ansich ist ja sowieso immer in ASCII codiert dank der %-Schreibweise. | ||
![]() |
ZEVS |
![]() Antworten mit Zitat ![]() |
---|---|---|
Zitat: Irgendwo hab ich gelesen, dass wenn nichts definiert wurde, ISO-8859-1 angenommen wird (Unicode)
ISO-8859-1 ist Latin 1, also nicht Unicode. RFC hat Folgendes geschrieben: Some HTTP/1.0 software has interpreted a Content-Type header without
charset parameter incorrectly to mean "recipient should guess." Senders wishing to defeat this behavior MAY include a charset parameter even when the charset is ISO-8859-1 and SHOULD do so when it is known that it will not confuse the recipient. (http://tools.ietf.org/html/rfc2616#page-22) Deshalb: Einfach HTTP 1.1 verwenden und charset mitsenden. |
||
![]() |
Jolinah |
![]() Antworten mit Zitat ![]() |
---|---|---|
Oh stimmt, sorry ![]() |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group