Einzelnen Beitrag anzeigen

Hedge

Registriert seit: 30. Jun 2007
278 Beiträge
 
Delphi 2009 Professional
 
#1

[D2009] HTTPEncode (aus HTTPApp.pas) funktioniert nicht

  Alt 2. Okt 2009, 10:14
Ich habe die HTTPEncode-Funktion aus der Unit HTTPApp.pas umgeschrieben so, dass ich in Delphi 2009 nicht mit AnsiStrings rumfuddeln muss:

Delphi-Quellcode:
function HTTPEncode(const AStr: String): String;
// The NoConversion set contains characters as specificed in RFC 1738 and
// should not be modified unless the standard changes.
const
  NoConversion = ['A'..'Z','a'..'z','*','@','.','_','-',
                  '0'..'9','$','!','''','(',')'];
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;
Leider tritt jedes Mal wenn Zeichen kodiert werden müssen (z.B. bei dem String 'Lala & Po - Winke Winke') folgender Fehler auf:

Zitat:
EConvertError mit Meldung 'Format '%%' ungültig oder nicht kompatibel mit Argument'
bei der Zeile 'Inc(Rp,2);

Was läuft da verkehrt?
٩๏̯͡๏)۶
  Mit Zitat antworten Zitat