- 人气:
- 放大
- 缩小
- 二维码
- 赞赏
delphi urlencode与urldecode
function UrlDecode(const AStr: AnsiString): AnsiString;
var
Sp, Rp, Cp: PAnsiChar;
s: AnsiString;
begin
SetLength(Result, Length(AStr));
Sp := PAnsiChar(AStr);
Rp := PAnsiChar(Result);
Cp := Sp;
while Sp^ <> #0 do
begin
case Sp^ of
'+':
Rp^ := ' ';
'%':
begin
// Look for an escaped % (%%) or % encoded character
Inc(Sp);
if Sp^ = '%' then
Rp^ := '%'
else
begin
Cp := Sp;
Inc(Sp);
if (Cp^ <> #0) and (Sp^ <> #0) then
begin
s := AnsiChar('$') + Cp^ + Sp^;
Rp^ := AnsiChar(StrToInt(string(s)));
end;
end;
end;
else
Rp^ := Sp^;
end;
Inc(Rp);
Inc(Sp)
end;
SetLength(Result, Rp - PAnsiChar(Result));
end;
function UrlEncode(const AStr: AnsiString): AnsiString;
const
NoConversion = ['A' .. 'Z', 'a' .. 'z', '*', '@', '.', '_', '-',
'0' .. '9', '$', '!', '''', '(', ')'];
var
Sp, Rp: PAnsiChar;
begin
SetLength(Result, Length(AStr) * 3);
Sp := PAnsiChar(AStr);
Rp := PAnsiChar(Result);
while Sp^ <> #0 do
begin
if Sp^ in NoConversion then
Rp^ := Sp^
else
if Sp^ = ' ' then
Rp^ := '+'
else
begin
FormatBuf(Rp^, 3, AnsiString('%%%.2x'), 6, [Ord(Sp^)]);
Inc(Rp, 2);
end;
Inc(Rp);
Inc(Sp);
end;
SetLength(Result, Rp - PAnsiChar(Result));
end;