Hi!
In one of my html forms I had to use html element "<select multiple
name=...", so when the user selects multiple items, we got a datastream
like this:
var1=value1&var1=value2&var1=value3... etc.
Original function returned only the first value of var1. I know the
remark states that it retrieves only a single value, but since I did not
found an other function retrieving multiple values like that, I took
some guts, and made some modification to it.
Just in case someone faces the same problem, here is the modified code.
In case of multiple values, they are separated by CRLFs, so the result
can be loaded to a TString descendent's Text property for example .
Peter
function ExtractURLEncodedValue(
Msg : PChar; { URL Encoded stream }
Name : String; { Variable name to look for }
var Value : String) { Where to put variable value }
: Boolean; { Found or not found that's the question }
var
NameLen : Integer;
FoundLen : Integer; {tps}
Ch : Char;
P, Q : PChar;
begin
Result := FALSE;
Value := '';
if Msg = nil then { Empty source }
Exit;
NameLen := Length(Name);
P := Msg;
while P^ <> #0 do begin
Q := P;
while (P^ <> #0) and (P^ <> '=') do
Inc(P);
FoundLen := P - Q; {tps}
if P^ = '=' then
Inc(P);
if (StrLIComp(Q, @Name[1], NameLen) = 0) and
(NameLen = FoundLen) then begin {tps}
{*** Multiple Values ***}
If Value <> ''
Then Value := Value + #13#10; // separate values by CrLf
{**********}
while (P^ <> #0) and (P^ <> '&') do begin
Ch := P^;
if Ch = '%' then begin
Ch := chr(htoi2(P + 1));
Inc(P, 2);
end
else if Ch = '+' then
Ch := ' ';
Value := Value + Ch;
Inc(P);
end;
Result := TRUE;
// break; {*** Commented *** We are looking for more
"Name"-s}
end;
while (P^ <> #0) and (P^ <> '&') do
Inc(P);
if P^ = '&' then
Inc(P);
end;
end;
--
To unsubscribe or change your settings for TWSocket mailing list
please goto http://www.elists.org/mailman/listinfo/twsocket
Visit our website at http://www.overbyte.be