![]() |
html code parsen
hi leutz,
ich suche verzweifelt ne möglichkeit oder eine kompo, wo ich html quelltext parsen kann. und zwar brauch ich nur den reinen text. das ansich ist kee großes problem, kann man ja per pos copy usw rausholen! mein problem an der ganzen sache ist, das es vorkommen kann, das ein "<" oder ">" in dem text vorkommen kann! ich geb euch mal ein beispiel:
Code:
unnötige zeilen wie <div class="sysmsg">23:17:00 [b]<font color="#5a88ff">honigbiene</font> verlässt den Chat.[/b]</div> <script type="text/javascript">scroll();</script> <script type="text/javascript">prescroll();</script> <script type="text/javascript">parent.updateUser('Delphi', 4, 0, 0);</script><script type="text/javascript">scroll();</script> <script type="text/javascript">prescroll();</script> <div class="text" style="color:#0000ff;">(<span style="cursor:pointer;" onclick="parent.clickNick('Delphi',event);" style="color: #0000ff;">Delphi</span>) <<<<>>>>>></div> <script type="text/javascript">scroll();</script> <script type="text/javascript">prescroll();</script> <script type="text/javascript">scroll();</script> <script type="text/javascript">prescroll();</script> <script type="text/javascript">parent.updateUser('Delphi', 4, 1, 0);</script><script type="text/javascript">scroll();</script> <script type="text/javascript">prescroll();</script>
Code:
werden bereits entfernt beim auslesen. gibts irgendwas, was mir nur den reinen text ausgibt?
<script type="text/javascript">scroll();</script>
<script type="text/javascript">prescroll();</script> mfg matthias |
Re: html code parsen
Den folgenden Sourcecode habe ich mal gefunden :
Delphi-Quellcode:
erstellt durch
// Extract plain text from html string
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; ![]() Vielleicht hilft er Dir ja weiter. |
Re: html code parsen
Entweder du nimmst den parser des IE (TWebBrowser -> Document und Einbinden von MSHTML.pas) oder versuchst die Decodierung mit dem
![]() |
Re: html code parsen
wenn in deinem zu parsenden wirklich außerhalb von Tags "<" und ">" vorkommen ist es kein wirklicher HTML-Code. Da hat sich irgendjemand nicht an Standards gehalten.
In oben gezeigtem Fall kann es sogar ein Sicherheitsrisiko werden da es so ausiseht als ob man damit anderen Leuten im Chat HTML-Code vorsetzen kann und somit auch Scripte. Wenn man das ganze trotzdem parsen will braucht man eigentlich nur mit dem Gedanken ran gehen: Woran erkenne ich als Mensch das diese "<" und ">" in bestimmten Fällen kein einleiten oder schließen eines Tags ist. |
Re: html code parsen
ich hab mit eurer hilfe eine ganz nützliche function gefunden:
Delphi-Quellcode:
jetzt muss ich bloß noch rausfinden, wieso der mir so einen script fehler ausgibt und wie ich das unterbinden kann!
function HtmlToText(const _html: string): string;var WebBrowser: TWebBrowser;
Document: IHtmlDocument2; Doc: OleVariant; v: Variant; Body: IHTMLBodyElement; TextRange: IHTMLTxtRange; begin Result := ''; WebBrowser := TWebBrowser.Create(nil); try Doc := 'about:blank'; WebBrowser.Navigate2(Doc); Document := WebBrowser.Document as IHtmlDocument2; if (Assigned(Document)) then begin v := VarArrayCreate([0, 0], varVariant); v[0] := _html; Document.Write(PSafeArray(TVarData(v).VArray)); Document.Close; Body := Document.body as IHTMLBodyElement; TextRange := Body.createTextRange; Result := TextRange.text; end; finally WebBrowser.Free; end; end; mfg matthias |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:27 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz