delphi 最快速编码 URLDecode URLEncode

function URLDecode(const S: string): string;

var

Idx: Integer; // loops thru chars in string

Hex: string; // string of hex characters

Code: Integer; // hex character code (-1 on error)

begin

// Intialise result and string index

Result := '';

Idx := 1;

// Loop thru string decoding each character

while Idx <= Length(S) do

begin

case S[Idx] of

'%':

begin

// % should be followed by two hex digits - exception otherwise

if Idx <= Length(S) - 2 then

begin

// there are sufficient digits - try to decode hex digits

Hex := S[Idx+1] + S[Idx+2];

Code := SysUtils.StrToIntDef('$' + Hex, -1);

Inc(Idx, 2);

end

else

// insufficient digits - error

Code := -1;

// check for error and raise exception if found

if Code = -1 then

raise SysUtils.EConvertError.Create(

'Invalid hex digit in URL'

);

// decoded OK - add character to result

Result := Result + Chr(Code);

end;

'+':

// + is decoded as a space

Result := Result + ' '

else

// All other characters pass thru unchanged

Result := Result + S[Idx];

end;

Inc(Idx);

end;

end;

function URLEncode(const S: string; const InQueryString: Boolean): string;

var

Idx: Integer; // loops thru characters in string

begin

Result := '';

for Idx := 1 to Length(S) do

begin

case S[Idx] of

'A'..'Z', 'a'..'z', '0'..'9', '-', '_', '.':

Result := Result + S[Idx];

' ':

if InQueryString then

Result := Result + '+'

else

Result := Result + '%20';

else

Result := Result + '%' + SysUtils.IntToHex(Ord(S[Idx]), 2);

end;

end;

end;