Archiv verlassen und diese Seite im Standarddesign anzeigen : html tag entferner? wie PHP htmlentities()
HI CB'ler
Ich such sowas wie einen htmltagentferner wie bei php die function htmlentities , gibt es sowas auch für perl?
eViL_oNe
11.01.2006, 12:52
nicht dass ich wüsste (vielleicht irgendwo in CPAN?)
allerdings einfach zu bewerkstelligen:
für alle Zeichen > ASCII 127 ersetze Zeichen durch &#<ascii-wert>;
ansonsten sollten noch einige spezielle Zeichen innerhalb des Bereichs 0-127 ersetzt werden:
< => <
> => >
& => &
" => "
usw.
btw, htmlentities ist definitiv kein HTML-Tag-Entferner :p
Naja htmlspecialchars() -> Aber irgentwas aus der Rubrik wars ^^
Sagen wir es mal so mag eine Artikelbeschreibung als Meta Description nutzen doch sind die Artikelbeschreibungen teilweise mit html Tags in der DB gespeichert was auch völlig korrekt ist.
Nur in der Ausgabe bei den Metatags sind die html tags ehr zerreißend
eViL_oNe
11.01.2006, 17:43
Sagen wir es mal so mag eine Artikelbeschreibung als Meta Description nutzen doch sind die Artikelbeschreibungen teilweise mit html Tags in der DB gespeichert was auch völlig korrekt ist.
Nur in der Ausgabe bei den Metatags sind die html tags ehr zerreißend
$strippedHtml =~ s/<[^>]+>([^<]*)<\/[^>]+>/$1/g;
nicht getestet, wollte nur das Prinzip aufzeigen, um alle HTML-Tags komplett (ohne Backtracking) herauszuschmeißen, den darin enthaltenen Inhalt jedoch unbeanstandet zu lassen.
das sieht doch schonmal fantastisch aus -> dank dir evil .D
Sorry Evil deine Variante lief leider nicht.
Hab aber in einem anderem Forum folgendes gefunden was abhilfe geschaffen hat:
Hallo Leute.Versuch es mal so:
$htmltext =~ s/<([^>]|\s)*>//gs;
Kurze Erklärung dazu. Du bildest ein Klasse, die auf alle Zeichen außer der schließenden Klammer zutrifft. --> [^>]
Bei HTML Tags über mehr als eine Zeile würde das aber nicht klappen, da durch die Klasse keine Whitespaces entfernt werden. Daß macht dann die zusätzliche Angabe. --> |\s
Damit soll ich dann beliebig viele Zeichen oder auch keines entfernen, also fasse ich es zusammen. --> ([^>]|\s)*
Der kleinste mögliche Treffer ist jetzt <>, der größte ist nach oben hin offen. Diese RegEx ist aber nicht perfekt. Es wird einige Kombinationen geben, die zwar von der RegEx entfernt werden, wo aber das Ergebnis nicht stimmt. Als Beispiel seien hier HTML Tags in Kommentaren genannt. -->
<!-- Dieser Text soll durch <b> fett geschrieben werden -->
Eine bessere Variante findest du in Perl-Dokumentation unter HTML::Parser
MfG Maik
eViL_oNe
24.01.2006, 20:47
ich habe mein snipplet nicht als proof of concept missverstanden haben wollen, ist ja wie gesagt ungetestet.
Dennoch bin ich der Meinung, dass es prinzipiell funktionieren sollte --abgesehen von der Tatsache, dass ich nicht bedacht habe, dass in HTML nicht jeder Tag geschlossen sein muss (in XML basierten Sprachen sollte meine Variante tadellos funktionieren).
Die Variante ist imo semantisch nicht korrekt:
sie würde auch <das ist ein test> als HTML herausfiltern oder x < y > z (was ein arithmetischer Ausdruck sein soll).
Da eine solche Filterung auch Ausdrücke wie <dateiname> herausfiltert, würde ich eh ganz davon absehen, und das Problem an der Wurzel packen: wozu überhaupt HTML-Speicherung ermöglichen? HTML enthält kaum Semantik!
Naja wenn jemand sein eigenes Layout nutzen möchte soll er das doch auch tun können :D
Es ist natürlich nicht die beste Variante da man mit BB Code oder sonste was die Sache hätte vereinfachen können aber ich denke soweit funktioniert das schon ganz gut mit HTML
eViL_oNe
25.01.2006, 18:55
auch BB Code ist nur ein work-around und nicht die Lösung des Problems -- die beste Alternative wäre, ein XML-Format zu definieren, welches alle für dich notwendigen gestalterischen Elemente (etwa links, Bilder, Seitenwechsel, Chapter, Sections, Subsections, etc) enthält.
Hier kannst du auf einen simplen XML Schema Validator zur Gültigkeitsprüfung zurückgreifen. Mit XSLT ist es dann sogar möglich, das Ganze in jedes x-beliebige Zielformat (etwa OpenDoc, HTML, Plain-Text, PDF, etc) zu verwandeln :).
XML und XSLT Parser gibts in Massen, und das sogar Open Source *g*
vBulletin® v3.8.6, Copyright ©2000-2012, Jelsoft Enterprises Ltd.