Die Funktion ReplaceHTMLChar machte noch immer Probleme bei nicht abgeschlossenem Tag oder wenn einfach mal so ein "&" vorkam.
Habe das nun komplett neu durchdacht:
Delphi-Quellcode:
function ReplaceHTMLChar(sValue: string): string;
var
tagStartPos, tagNxtStartPos : Integer;
tagEndPos : Integer;
tag, newTag : string;
Found : BOOLEAN;
begin
tagEndPos:=1;
Result:=sValue;
TRY
REPEAT
Found:=FALSE;
tagStartPos:=PosEx('&', Result, tagEndPos);
if tagStartPos > 0 then
BEGIN
tagEndPos:=PosEx(';', Result, tagStartPos);
Found:=(tagEndPos > tagStartPos);
if Found then
BEGIN
tagNxtStartPos:=tagStartPos;
REPEAT // Gibts vielleicht noch ein Start- vor dem Ende-Zeichen?
tagNxtStartPos:=PosEx('&', Result, tagNxtStartPos+1);
if (tagNxtStartPos > 0) AND (tagNxtStartPos < tagEndPos) then
tagStartPos:=tagNxtStartPos;
UNTIL (tagNxtStartPos = 0) OR (tagNxtStartPos > tagEndPos);
if (tagEndPos - tagStartPos < 8) then
BEGIN
tag:=copy(Result, tagStartPos, tagEndPos - tagStartPos + 1);
newTag:=GiveSZ(tag);
Result:=copy(Result, 1, tagStartPos - 1) + newTag +
copy(Result, tagEndPos + 1, length(Result) - tagEndPos);
tagEndPos:=tagEndPos - length(tag) + length(newTag);
END
ELSE
tagEndPos:=tagStartPos+1;
END;
END;
UNTIL Not Found;
EXCEPT
Result:=sValue; // Wenn doch was unvorhergesehenes passiert, dann lieber ungewandelt zurück!
END;
Bitte Melden, wenn auch damit Probleme entstehen sollten.