Witam. Potrzebuję zamienić HTML na zwykły tekst. Problem w tym, że nie mam pliku HTML, tylko pole typu text z bazy MS SQL. Szukałem jakiegoś darmowego parsera, który przyjąłby zwykły tekst zamiast TStream, ale nie znalazłem. Czy mógłby ktoś podpowiedzieć w jaki sposób zamienić HTML na zwykły tekst z pominięciem wszystkich tagów HTML bez użycia potoku, tylko po prostu zwykłego tekstu?
Na stronie http://www.scalabium.com/faq/dct0162.htm znalazłem takie rozwiązanie na usuwanie znaczników z kodu
function StripHTMLTags(const strHTML: string): string;
var
P: PChar;
InTag: Boolean;
i, intResultLength: Integer;
begin
P := PChar(strHTML);
Result := '';
InTag := False;
repeat
case P^ of
'<': InTag := True;
'>': InTag := False;
#13, #10: ; {do nothing}
else
if not InTag then
begin
if (P^ in [#9, #32]) and ((P+1)^ in [#10, #13, #32, #9, '<']) then
else
Result := Result + P^;
end;
end;
Inc(P);
until (P^ = #0);
{convert system characters}
Result := StringReplace(Result, '"', '"', [rfReplaceAll]);
Result := StringReplace(Result, ''', '''', [rfReplaceAll]);
Result := StringReplace(Result, '>', '>', [rfReplaceAll]);
Result := StringReplace(Result, '<', '<', [rfReplaceAll]);
Result := StringReplace(Result, '&', '&', [rfReplaceAll]);
{here you may add another symbols from RFC if you need}
end;
madmike napisał(a)
Na stronie http://www.scalabium.com/faq/dct0162.htm znalazłem takie rozwiązanie na usuwanie znaczników z kodu
Sprawdziłem ten kod - zbija całą zawartość w jeden ciąg, zamiast zamieniać
na #13 usuwa go. No nic - trzeba go przerobić, szkoda, że mam tak mało czasu :-(
Chyba jaja sobie robisz z tym czasem... dosłownie 10 sek roboty !
Opi napisał(a)
Chyba jaja sobie robisz z tym czasem... dosłownie 10 sek roboty !
No dobrze poświęciłem 10 sekund na poprawki...
zamień linię:
P := PChar(strHTML);
na
P := PChar(StringReplace(strHTML, '<br>', #13#10, [rfReplaceAll]));
zamień linię
#13, #10: ; {do nothing}
na
//#13, #10: ; {do nothing}
madmike napisał(a)
Opi napisał(a)
Chyba jaja sobie robisz z tym czasem... dosłownie 10 sek roboty !
No dobrze poświęciłem 10 sekund na poprawki...zamień linię:
P := PChar(strHTML);
na
P := PChar(StringReplace(strHTML, '<br>', #13#10, [rfReplaceAll]));
zamień linię
#13, #10: ; {do nothing}
na
//#13, #10: ; {do nothing}
Dzięki :-) , nie śledzę tego forum w oczekiwaniu na to, że ktoś zrobi to za mnie - zrobiłem to samodzielnie :-) Nie zajęło mi to 10 sekund, bo jeszcze musiałem wprowadzić kilka innych poprawek, ale dałem radę.