49 votes

Fonction de codage d'URL standard?

Existe-t-il un équivalent de Delphi de la méthode de ce réseau:

 Url.UrlEncode () 

113voto

Mohammed Nasman Points 8548

Regardez l’unité IdyRI indy, elle a deux méthodes statiques dans la classe TIdURI pour Encoder / Décoder l’URL.

 uses
  IdURI;

..
begin
  S := TIdURI.URLEncode(str);
//
  S := TIdURI.URLDecode(str);
end;
 

30voto

Alister Points 2734

Une autre méthode simple consiste à utiliser la fonction HTTPEncode dans l’unité HTTPApp - très approximativement.

 Uses 
  HTTPApp;

function URLEncode(const s : string) : string;
begin
  result := HTTPEncode(s);
end
 

14voto

Radek Hladík Points 215

Je me suis fait cette fonction pour encoder tout sauf les caractères vraiment sûrs. Surtout j'ai eu des problèmes avec +. Sachez que vous ne pouvez pas encoder l'intégralité de l'URL avec cette fonction, mais que vous avez besoin d'encoder les parties pour lesquelles vous ne voulez pas avoir de signification particulière, généralement les valeurs des variables.

 function MyEncodeUrl(source:string):string;
 var i:integer;
 begin
   result := '';
   for i := 1 to length(source) do
       if not (source[i] in ['A'..'Z','a'..'z','0','1'..'9','-','_','~','.']) then result := result + '%'+inttohex(ord(source[i]),2) else result := result + source[i];
 end;
 

13voto

skamradt Points 13049

Une autre option consiste à utiliser la bibliothèque Synapse qui possède une méthode de codage d’URL simple (ainsi que de nombreuses autres) dans l’unité SynaCode .

 uses
  SynaCode;
..
begin
  s := EncodeUrl( str );
//
  s := DecodeUrl( str );
end;
 

12voto

Altar Points 5284
 class function TIdURI.ParamsEncode(const ASrc: string): string;
var
  i: Integer;
const
  UnsafeChars = '*#%<> []';  {do not localize}
begin
  Result := '';    {Do not Localize}
  for i := 1 to Length(ASrc) do
  begin
    if CharIsInSet(ASrc, i, UnsafeChars) or (not CharIsInSet(ASrc, i, CharRange(#33,#128))) then begin {do not localize}
      Result := Result + '%' + IntToHex(Ord(ASrc[i]), 2);  {do not localize}
    end else begin
      Result := Result + ASrc[i];
    end;
  end;
end;
 

D'Indy.


Quoi qu'il en soit, Indy ne fonctionne pas correctement, vous devez donc voir cet article :
http://marc.durdin.net/2012/07/indy-tiduripathencode-urlencode-and.html

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X