AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

HTML Tags entfernen

Ein Thema von knolli · begonnen am 16. Jan 2008 · letzter Beitrag vom 2. Jun 2015
Antwort Antwort
Seite 3 von 3     123   
Benutzerbild von knolli
knolli

Registriert seit: 22. Sep 2006
Ort: Zittau
83 Beiträge
 
Delphi 7 Enterprise
 
#21

Re: HTML Tags entfernen

  Alt 18. Jan 2008, 22:05
ok danke...
das es aus java kommt wusste ich bis jetzt noch nicht... ich werd mal mein bestes geben und mal suchen...
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#22

Re: HTML Tags entfernen

  Alt 19. Jan 2008, 01:17
Zitat von omata:
Hier auch nochmal ein Vorschlag mit regulären Ausdrücken...
Delphi-Quellcode:
function CleanHtmlTags(Html:string):string;
var RegExpr:TRegExpr;
begin
  Result:='';
  RegExpr:=TRegExpr.Create;
  try
    RegExpr.ModifierG:=false;
    RegExpr.Expression:='<body>(.*)</body>';
    if RegExpr.Exec(Html) then begin
      Html:=RegExpr.Match[0];
      RegExpr.Expression:='<.*>';
      Result:=RegExpr.Replace(Html, ' ', false);
      Result:=trim(StringReplace(Result, ' ', ' ', [rfReplaceAll]));
    end;
  finally
    RegExpr.Free;
  end;
end;
RegExpr

Gruss
Thorsten
Durch das "gierige Verhalten" von RegExp würde das aber alles vom ersten bis zum letzten Tag löschen...
  Mit Zitat antworten Zitat
omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#23

Re: HTML Tags entfernen

  Alt 19. Jan 2008, 01:25
Zitat von NamenLozer:
Durch das "gierige Verhalten" von RegExp würde das aber alles vom ersten bis zum letzten Tag löschen...
Hast du das getestet?

Dafür hatte ich eigentlich...
RegExpr.ModifierG:=false; eingefügt.
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#24

Re: HTML Tags entfernen

  Alt 19. Jan 2008, 01:31
Ok, darauf hab ich nicht geachtet. Ich kenn die Komponente nicht, aber RegExp von PHP...
  Mit Zitat antworten Zitat
nat

Registriert seit: 10. Nov 2005
216 Beiträge
 
RAD-Studio 2009 Pro
 
#25

Re: HTML Tags entfernen

  Alt 3. Jun 2009, 16:54
zur der lösung mit ner regex...
man sollte noch drauf achten, dass <...> auch in einem string vorkommen kann der dann ignoriert werden sollte.
z.B. in sowas [img]image.jpg[/img] tag">
Code:
<.*>
würde hier fehlerhaft funktionieren.
ich würde das dann etwas erweitern. so ausm kopf in diese richtung:
Code:
<(.*)(".*")*>
sollte zwar nicht oft vorkommen, aber möglich ist es halt.
  Mit Zitat antworten Zitat
quendolineDD

Registriert seit: 19. Apr 2007
Ort: Dresden
781 Beiträge
 
Turbo Delphi für Win32
 
#26

Re: HTML Tags entfernen

  Alt 3. Jun 2009, 17:10
Zitat von NamenLozer:
Ok, darauf hab ich nicht geachtet. Ich kenn die Komponente nicht, aber RegExp von PHP...
Auch in PHP kann man das gierige Verhalten unterbinden.
Lars S.
Wer nicht mit der Zeit geht, geht mit der Zeit.
  Mit Zitat antworten Zitat
Benutzerbild von Codehunter
Codehunter

Registriert seit: 3. Jun 2003
Ort: Thüringen
2.272 Beiträge
 
Delphi 10.4 Sydney
 
#27

Re: HTML Tags entfernen

  Alt 20. Apr 2010, 11:20
Da ich grad selbst an dem Problem hing und auch die bereits erwähnte Zugriffsverletzung bekam, hier mal eine einfachere und funktionierende, dafür geringfügig weniger performante Lösung:

Code:
function dwStripTags(AHTML: String): String;
var
  TagBegin, TagEnd, TagLength: integer;
begin
  TagBegin := Pos( '<', AHTML);
  while (TagBegin > 0) do begin
  TagEnd := Pos('>', AHTML);
  TagLength := TagEnd - TagBegin + 1;
  Delete(AHTML, TagBegin, TagLength);
  TagBegin:= Pos( '<', AHTML);
  end;
  Result := AHTML;
end;
  Mit Zitat antworten Zitat
Monday

Registriert seit: 24. Aug 2012
103 Beiträge
 
FreePascal / Lazarus
 
#28

AW: HTML Tags entfernen

  Alt 27. Jul 2014, 16:48
Hi Leute,

ich weiß der Thread ist etwas älter. Aber da viele Leute auf diese Funktionen hier zurückgreifen, möchte ich noch ergänzen.

Unter dem Geschwindigkeitsaspekt habe ich gemessen:

dwStrips benötigte im Durchschnitt 77,6 ms
StripTags benötigte im Durchschnitt 56,3 ms
CleanHTMLTags benötigte im Durchschnitt 4,6 ms

Für kleinere Anwendungen oder wenigen Anrufen spielt es keine Rolle welche Funktion man nimmt. Möchte man aber größere Texte, öfters Texte durchlaufen lassen sollte man CleanHTMLTags nehmen. dwStrips zieht sich schnell in die Länge.

Bei CleanHTMLTags habe ich eine kleine Änderung vorgenommen und sieht so aus:
Delphi-Quellcode:
function CleanHtmlTags(Html:string):string;
var RegExpr:TRegExpr;
begin
  Result:='';
  RegExpr:=TRegExpr.Create;
  try
    RegExpr.ModifierG:=false;
    RegExpr.Expression:='<.*>';
    Result:=RegExpr.Replace(Html, ' ', false);
    Result:=trim(StringReplace(Result, ' ', ' ', [rfReplaceAll]));
  finally
    RegExpr.Free;
  end;
end;
Das Ergebnis sah bei allen Funktionen gleich aus, wobei ich hier keinen genauen vergleich gemacht habe.

LG
Monday

Geändert von Monday (27. Jul 2014 um 17:01 Uhr)
  Mit Zitat antworten Zitat
handyotto

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

AW: HTML Tags entfernen

  Alt 3. Feb 2015, 11: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:&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 11:40 Uhr)
  Mit Zitat antworten Zitat
handyotto

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

AW: Re: HTML Tags entfernen

  Alt 2. Jun 2015, 11:54
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.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 3     123   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:29 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz