Thema: Delphi HTML Tags entfernen

Einzelnen Beitrag anzeigen

handyotto

Registriert seit: 6. Aug 2012
10 Beiträge
 
#29

AW: HTML Tags entfernen

  Alt 3. Feb 2015, 10:18
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 &nbsp: &nbsp 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.

Geändert von handyotto ( 3. Feb 2015 um 10:40 Uhr)
  Mit Zitat antworten Zitat