Pagina1 van 1
Forum

Welkom bij de Tweaking4All gemeenschapsforums!
Voor je gaat deelnemen, bekijk de Forum Regels!

Specifieke onderwerpen: Start het onderwerp met de naam van het programma of systeem.
Bijvoorbeeld “MacOS X – Jouw vraag“, of bijvoorbeeld “MS Word – Jouw Tip of Truc“.

Merk op: Omschakelen naar een andere taal zal niet werken als je een post aan het lezen bent aangezien er waarschijnlijk geen vertaling beschikbaar is.



Deel:
Meldingen
Alles wissen

[Opgelost] Lazarus/Delphi - Encode een URL

2 Berichten
1 Gebruikers
0 Reactions
1,917 Bekeken
 Hans
(@hans)
Famed Member Admin
Deelgenomen: 12 jaar geleden
Berichten: 2869
Topic starter  

Voor een van mijn programma's moest ik tekst omzetten (URL Encode), de volgende functie doet dat uitstekend:

function HTTPEncode(const AStr: string): string; 
const 
  NoConversion = ['A'..'Z', 'a'..'z', '*', '@', '.', '_', '-']; 
var 
  Sp, Rp: PChar; 
begin 
  SetLength(Result, Length(AStr) * 3); 
  Sp := PChar(AStr); 
  Rp := PChar(Result); 
  while Sp^ <> #0 do 
  begin 
    if Sp^ in NoConversion then 
      Rp^ := Sp^ 
    else if Sp^ = ' ' then 
      Rp^ := '+' 
    else 
    begin 
      FormatBuf(Rp^, 3, '%%%.2x', 6, [Ord(Sp^)]); 
      Inc(Rp, 2); 
    end; 
    Inc(Rp); 
    Inc(Sp); 
  end; 
  SetLength(Result, Rp - PChar(Result)); 
end; 

   
BeantwoordenCiteren
 Hans
(@hans)
Famed Member Admin
Deelgenomen: 12 jaar geleden
Berichten: 2869
Topic starter  

Een goed alternatief:

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

   
BeantwoordenCiteren
Deel: