NMURL.pas
上传用户:szzdds
上传日期:2013-09-18
资源大小:293k
文件大小:4k
源码类别:

Delphi控件源码

开发平台:

Delphi

  1. unit NMURL;
  2. {$X+}
  3. {$R-}
  4. {$IFDEF VER100}
  5. {$DEFINE NMF3}
  6. {$ENDIF}
  7. {$IFDEF VER110}
  8. {$DEFINE NMF3}
  9. {$ENDIF}
  10. {$IFDEF VER120}
  11. {$DEFINE NMF3}
  12. {$ENDIF}
  13. {$IFDEF VER125}
  14. {$DEFINE NMF3}
  15. {$ENDIF}
  16. interface
  17. uses
  18.    SysUtils, Classes, NMConst;
  19. {$IFDEF VER110}
  20. {$ObjExportAll On}
  21. {$ENDIF}
  22. {$IFDEF VER120}
  23. {$ObjExportAll On}
  24. {$ENDIF}
  25. {$IFDEF VER125}
  26. {$ObjExportAll On}
  27. {$ENDIF}
  28.    //  CompName     ='NMURL';               
  29.    //  Major_Version='4';                   
  30.    //  Minor_Version='02';                  
  31.    //  Date_Version ='012798';              
  32.    
  33.    
  34.    
  35. type
  36.    TOnErrorEvent = procedure (Sender: TObject; Operation, ErrMsg: string) of object;
  37.    TNMURL = class(TComponent)
  38.    private
  39.       { Private declarations }
  40.       FInputString: string;
  41.       FOnError: TOnErrorEvent;
  42.       function GetEncodeString: string;
  43.       function GetDecodeString: string;
  44.       function URLDecode(const InString: string): string;
  45.       function URLEncode(const InString: string): string;
  46.    protected
  47.       { Protected declarations }
  48.    public
  49.       { Public declarations }
  50.       constructor Create(AOwner: TComponent); override;
  51.       destructor Destroy; override;
  52.       property Encode: string
  53.          read GetEncodeString;
  54.       property Decode: string
  55.          read GetDecodeString;
  56.    published
  57.       { Published declarations }
  58.       property InputString: string
  59.          read FInputString
  60.          write FInputString;
  61.       property OnError: TOnErrorEvent read FOnError write FOnError;
  62.    end; {_ TNMURL = class(TComponent) _}
  63. implementation
  64. constructor TNMURL.Create(AOwner: TComponent);
  65. begin
  66.    inherited Create(AOwner);
  67.    FInputString := ''; { Initialize values }
  68. end; {_ constructor TNMURL.Create(AOwner: TComponent); _}
  69. destructor TNMURL.Destroy;
  70. begin
  71.    inherited Destroy;
  72. end; {_ destructor TNMURL.Destroy; _}
  73. function TNMURL.UrlDecode(const InString: string): string;
  74. var
  75.    i   : integer;
  76.    Temp: string; 
  77. begin
  78.    result := '';
  79.    Temp := '';
  80.    i := 1;
  81.    try
  82.       while i <= Length(InString) do
  83.       begin
  84.          if InString[i] = '+' then
  85.          begin
  86.             Result := Result + ' ';
  87.             inc(i);
  88.             continue;
  89.          end {_ if InString[i] = '+' then _}
  90.          else if InString[i] = '%' then
  91.          begin
  92.             Temp := Concat('$', InString[i + 1], InString[i + 2]);
  93.             Result := Result + Chr(StrToInt(Temp));
  94.             inc(i, 3);
  95.             continue;
  96.          end; {_ if InString[i] = '%' then _}
  97.          Result := Result + InString[i];
  98.          inc(i)
  99.       end; {_ while i <= Length(InString) do _}
  100.    except
  101.       on E: Exception do
  102.          begin
  103.             if Assigned(FOnError) then FOnError(Self, sURL_DecodeMessage, e.message);
  104.             Result := InString;
  105.          end; {_ inc(i) _}
  106.    end; {_ try _}
  107. end; {_ function TNMURL.UrlDecode(const InString: string): string; _}
  108. function TNMURL.URLEncode(const InString: string): string;
  109. var
  110.    i: Word;
  111. begin
  112.    result := '';
  113.    try
  114.       for i := 1 to Length(InString) do
  115.          case ord(InString[i]) of
  116.             0..31, 33..47, 58..64, 91..96, 123..255:
  117.                Result := Result + Format('%%%.2x',[Ord(InString[i])]);
  118.             32: Result := Result + '+';
  119.          else {_ NOT case ord(InString[i]) of _}
  120.             Result := Result + InString[i];
  121.          end; {_ NOT case ord(InString[i]) of _}
  122.    except
  123.       on E: Exception do
  124.          begin
  125.             if Assigned(FOnError) then FOnError(Self, sURL_EncodeMessage, e.message);
  126.             Result := InString;
  127.          end; {_ NOT case ord(InString[i]) of _}
  128.    end; {_ try _}
  129. end; {_ function TNMURL.URLEncode(const InString: string): string; _}
  130. function TNMURL.GetEncodeString: string;
  131. begin
  132.    Result := URLEncode(FInputString);
  133. end; {_ function TNMURL.GetEncodeString: string; _}
  134. function TNMURL.GetDecodeString: string;
  135. begin
  136.    Result := URLDecode(FInputString);
  137. end; {_ function TNMURL.GetDecodeString: string; _}
  138. end.