2010-02-02 8 views

Répondre

5

Essayez ceci

function GetURLFilename(const FilePath:String;Const Delimiter:String='/'):String; 
    var I: Integer;  
begin  
    I := LastDelimiter(Delimiter, FILEPATH); 
    Result := Copy(FILEPATH, I + 1, MaxInt);  
    Result := UrlDecode(Result); 
end; 

urldecode a été copié à partir http://www.torry.net/dpfl/dzurl.html et ressemble

function UrlDecode(const EncodedStr: String): String; 
var 
    I: Integer; 
begin 
    Result := ''; 
    if Length(EncodedStr) > 0 then 
    begin 
    I := 1; 
    while I <= Length(EncodedStr) do 
    begin 
     if EncodedStr[I] = '%' then 
     begin 
      Result := Result + Chr(HexToInt(EncodedStr[I+1] 
             + EncodedStr[I+2])); 
      I := Succ(Succ(I)); 
     end 
     else if EncodedStr[I] = '+' then 
     Result := Result + ' ' 
     else 
     Result := Result + EncodedStr[I]; 

     I := Succ(I); 
    end; 
    end; 
end; 

function HexToInt(HexStr: String): Int64; 
var RetVar : Int64; 
    i : byte; 
begin 
    HexStr := UpperCase(HexStr); 
    if HexStr[length(HexStr)] = 'H' then 
    Delete(HexStr,length(HexStr),1); 
    RetVar := 0; 

    for i := 1 to length(HexStr) do begin 
     RetVar := RetVar shl 4; 
     if HexStr[i] in ['0'..'9'] then 
     RetVar := RetVar + (byte(HexStr[i]) - 48) 
     else 
     if HexStr[i] in ['A'..'F'] then 
      RetVar := RetVar + (byte(HexStr[i]) - 55) 
     else begin 
      Retvar := 0; 
      break; 
     end; 
    end; 

    Result := RetVar; 
end; 
+0

Vous pouvez utiliser TIdURI.URLDecode() en interne. –

Questions connexes