zoukankan      html  css  js  c++  java
  • 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;
  • 相关阅读:
    c#关闭excel进程失败的解决方法
    [数据库SQL实战] 基本语法记录
    [牛客数据库SQL实战] 51~61题及个人解答
    [牛客数据库SQL实战] 41~50题及个人解答
    [牛客数据库SQL实战] 31~40题及个人解答
    [牛客数据库SQL实战] 21~30题及个人解答
    [牛客数据库SQL实战] 11~20题及个人解答
    [牛客数据库SQL实战] 1~10题及个人解答
    [牛客数据库SQL实战] 准备篇
    我在博客园安家了
  • 原文地址:https://www.cnblogs.com/GarfieldTom/p/1608441.html
Copyright © 2011-2022 走看看