Ay cruso,
256 mal StringReplace über einen Memo.Text laufen zu lassen ist aus mehr als einem Grund nicht so genial. Da bietet sich eher die simple Iteration an:
Delphi-Quellcode:
function HTMLEncode(s: String): String;
var
i: Integer;
ce: String; // character entity
begin
SetLength(Result, Length(s) * 6);
for i := 1 to Length(s) do
begin
ce := Format('&#%.3d;', [Ord(s[i])]);
Move(ce[1], Result[i * 6 - 5], 6);
end;
end;
Aber auch das ist noch nicht genial, da ja nur ganz wenige Zeichen wirklich Probleme machen: Ampersand, LessThan, GreaterThan.
Wenn du die Daten später in einer WebBrowser-Lomponente anzeigen willst, dann ist gar keine Kodierung nötig, da du den Text einfach der Eigenschaft innerText eines Elementes zuweisen kannst.
Grüße vom marabu