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?