Entwickler-Ecke
Internet / Netzwerk - TidHTTP & Umlautproblem
sodaho - Fr 11.12.09 23:53
Titel: TidHTTP & Umlautproblem
Guten Abend,
folgendes Problem:
Für ein Onlinedatenbanktool übergebe ich per idHTTP.Post die Datensätze an die URL, die die Daten auswertet und in die Datenbank schreibt.
So weit so gut. Nur habe ich jetzt bemerkt, dass Umlaute wie ä ö ü als a o u dargestellt werden.
Was hat meine suche ergeben:
UTF8ToAnsi --> ergibt ein i mit Hausdach ein umgedrehtes Fragezeichen
HandleRedirects False/True --> Ändert nichts
Meine Frage:
Wie übergebe ich die Daten per idHTTP.Post, sodass die Umlaute korrekt auf der Website ankommen und dementsprechend in der Datenbank abgespeichert werden?
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| Strings := TStringList.Create;
Strings.Add('category=' + cmbcat.Text); Strings.Add('sonder=' + chkSonder.Hint); Strings.Add('picture=' + picDia.FileName); Strings.Add('productName=' + txtName.Text); Strings.Add('productSubtitle=' + txtSubtitle.Text); Strings.Add('productContext=' + memContext.Lines.Text); Strings.Add('price=' + txtPrice.Text);
idHTTP.Post('http://www.domain.nic/speichern.php', Strings); |
Habe die Frage auch hier gepostet:
http://forum.delphi-treff.de/showthread.php?t=28007
sodaho - Di 05.01.10 01:01
Guten Abend...
So, nach einigen Tagen Abwesenheit und Unicodestudium....
...dreh ich fast durch!
Ich habe herausgefunden, was es mit Unicode auf sich hat, was die Vorteile davon sind und warum es von Vorteil sein kann dass man auf Unicode umstellt.
Das einzige was ich NICHT herausgefunden habe ist:
wie ich per TidHttp.Get oder TidHttp.Post Daten an eine URL sende die unter anderem Sonderzeichen wie "ä" "ö" "ü" beinhalten.
Kann mir bitte jemand weiterhelfen, damit wenn ich die Daten per URL sende, auch die "ä" "ö" "ü"'s (Umlaute - Sonderzeichen) beim PHP-Script ankommen?
Ich bin für jede Hilfe und jeden Tipp sehr dankbar.
FinnO - Di 05.01.10 02:02
mal stellvertretenderweise soetwas wie
angewandt?
sodaho - Di 05.01.10 12:14
FinnO hat folgendes geschrieben : |
mal stellvertretenderweise soetwas wie
angewandt? |
Nein, bissher nur mit ü - was leider nicht funktioniert hat.
Was ist den %DC ? Weil: wenn ich das als URL sende, kriege ich ein Ü zurück :) Was ist das für eine "Zeichenzuordnung"?
Gausi - Di 05.01.10 12:24
Das ist die gängige Methode, URLs zu kodieren - der hexadezimale Code des Zeichens nach einem %. Wenn ich URLs mit Parametern aufrufe (z.B. bei Shoutcast oder LastFM), dann nutzen ich vorher so eine Funktion:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| function StringToURLString(aUTF8String: UTF8String): AnsiString; var i: integer; begin result := ''; for i := 1 to length(aUTF8String) do result := result + '%' + AnsiString(IntToHex(Ord(aUTF8String[i]),2)); end; |
Das sollte dann funktionieren. Man sollte nur aufpassen, dass man die Parameter-Steuerzeichen wie %, &, ? nicht auch so maskiert. ;-)
sodaho - Di 05.01.10 12:42
Gausi hat folgendes geschrieben : |
Das sollte dann funktionieren. Man sollte nur aufpassen, dass man die Parameter-Steuerzeichen wie %, &, ? nicht auch so maskiert. ;-) |
Vielen vielen Dank! :-)
Gibt es ein Limit an Zeichen die per Post oder URL gesendet werden?
Damit die %, & und co nicht maskiert werden:
Bevor ich die Daten in die TSTringList lade für den TidHTTP.Post, werden die Eingaben ausgewertet. Somit wandle ich diese im selben Schritt auch gleich um, und nicht die ganze URL :D
Werde jetzt gleich noch versuchen, ob das auch per POST funktioniert.
---
Moderiert von
Narses: Beiträge zusammengefasst---
OK, ich löse das ganze jetzt so:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7:
| ]function StringToURLString(aUTF8String: AnsiString): AnsiString; var i: integer; begin result := ''; for i := 1 to length(aUTF8String) do result := result + '%' + AnsiString(IntToHex(Ord(aUTF8String[i]),2)); end; |
Wobei ich aUTF8String: UTF8String mit AnsiString ersetzt habe. (1) Delphi 2009 gibt nun keine Warnhinweise mehr aus 2) Das PHP Script mit dem ich die Daten empfange und verarbeite reicht nun aus wenn ich da URLDecode($_POST['variable'] nur einmal verwende statt zwei mal :).
Vielen Dank für die Hilfe und Tipps! Ich bin grad unglaublich Glücklich :)
Einen wunderschönen Tag wünsch ich euch allen. Grüssle SoDaHo
Moderiert von
Narses: Zitat kenntlich gemacht.
Edit:
Ich korrigiere. Mit AnsiString werden logischerweise MEHR Warnhinweise ausgegeben.
So ist der "richtige" Code.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7:
| function StringToURLString(aUTF8String: String): String; var i: integer; begin result := ''; for i := 1 to length(aUTF8String) do result := result + '%' + String(IntToHex(Ord(aUTF8String[i]),2)); end; |
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!