Ja, auch ich muss dem alten Thread noch eine Ergänzung beisteuern.
Die Funktion ReplaceHTMLChar (in Beitrag #3 zu sehen), kann in eine Endlosschleife laufen und endet dann mit OutOfMemory.
Das passiert bei fehlerhaften Tags im Eingangsstring.
Beispiel: 'Dies ist ein Test  :   und so weiter.'
Das Problem kann einfach gelöst werden, wenn die unter IF noch einen ELSE-Zweig erhält.
Hier die korrigierte Version:
Delphi-Quellcode:
function ReplaceHTMLChar(sValue: string): string;
var
tagStartPos : Integer;
tagEndPos : Integer;
tag, newTag : string;
temp : string;
begin
tagStartPos := Pos('&', sValue);
tagEndPos := PosEx(';', sValue, tagStartPos);
if (tagEndPos > 0) AND ((tagEndPos - tagStartPos) < 8) then
begin
tag := copy(sValue, tagStartPos, tagEndPos - tagStartPos + 1);
newTag := GiveSZ(tag);
temp := copy(sValue, 1, tagStartPos - 1) + newTag +
copy(sValue, tagEndPos + 1, length(sValue) - tagEndPos);
sValue := temp;
tagEndPos := tagEndPos - length(tag) + length(newTag);
while (PosEx('&', sValue, tagEndPos) <> 0) and
(PosEx(';', sValue, tagEndPos) <> 0) do
begin
tagStartPos := PosEx('&', sValue, tagEndPos);
tagEndPos := PosEx(';', sValue, tagStartPos);
if tagEndPos - tagStartPos < 8 then
begin
tag := copy(sValue, tagStartPos, tagEndPos - tagStartPos + 1);
newTag := GiveSZ(tag);
temp := copy(sValue, 1, tagStartPos - 1) + newTag +
copy(sValue, tagEndPos + 1, length(sValue) - tagEndPos);
sValue := temp;
tagEndPos := tagEndPos - length(tag) + length(newTag);
end
ELSE
tagEndPos:=tagStartPos+1;
end;
end;
Result := sValue;
end;
Sehe gerade, dass ich oben, in der ersten IF, schon mal ein "tagEndPos > 0" einfügte.