Home » Tutorials » Netzwerk und Internet » ISAPI
ISAPI
Hilfsfunktionen
Parameterübergaben bei einem POST sehen wie folgt aus:
text=bla+bla+bla&zweiterparam=yes&dritter=no&vierter=1 Sonderzeichen, wie z.B. deutsche Umlaute oder Backslash etc werden hexadezimal codiert und wie folgt notiert:
%FF = Zeichen #0255.
Dabei sind die Zeichen immer nur ein Byte breit (= 2 hexadezimale Stellen).
Das „+“ im obigen Beispiel codiert das Leerzeichen (space, blank space). Diese speziellen Zeichen müssen also im Laufe der Weiterverarbeitung dekodiert werden. Dies erreichen wir mit folgenden drei Funktionen:
function EscapeToAscii(str: string): string; function HexToAscii(c: string): byte; begin c := '$' + c; result := _strtoint(c); end; var j: integer; pc: pchar; c: byte; begin pc := @str[1]; j := 1; while (pc[0] <> #0) do begin case pc[0] of '%': begin c := HexToAscii(pc[1] + pc[2]); str[j] := char(c); Inc(j); Inc(pc, 3); end; else begin str[j] := pc[0]; Inc(pc); Inc(j); end; end; end; SetLength(str, j - 1); result := str; end; function spaceout(s: string): string; var i: integer; begin i := 1; while i <= length(s) do case s[i] of '+': if (i + 1) <= length(s) then case s[i + 1] of '+': begin inc(i); s[i] := ' '; inc(i); end; else begin s[i] := ' '; inc(i); end; end else begin s[i] := ' '; inc(i); end; else inc(i); end; result := s; end; function GetAllparams(s: string): ATIStrings; var po: integer; procedure fillarray(s1: string); var posi: integer; begin setlength(result, length(result) + 1); posi := pos('=', s1); if posi > 0 then begin result[length(result) - 1].name := EscapeToAscii(copy(s1, 1, posi - 1)); delete(s1, 1, posi); if s1 <> '' then result[length(result) - 1].value := EscapeToAscii(s1); end else begin result[length(result) - 1].name := EscapeToAscii(s1); result[length(result) - 1].value := ''; end; end; begin setlength(result, 0); po := pos('&', s); case po > 0 of TRUE: while po > 0 do begin fillarray(copy(s, 1, po - 1)); delete(s, 1, po); po := pos('&', s); end; end; Fillarray(s); end;
Erstere konvertiert dabei die hexadezimal codierten Anteile zurück in ASCII/ANSI Zeichen. Letztere konvertiert „+“ zu “ “ (ein echtes „+“ wird mit „++“ codiert!).