Delphi中对URL进行编码和解码

Delphi中处理URL时,有时会遇到编码问题,比如文件名如果含有空格,则空格会被%20代替。如果不进行转换,则会出现问题。在网上找到一段转换代码(Delphi没有自带的?),可以顺利进行

 

//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;

 

 

你可能感兴趣的:(Delphi)