Von perlfaq9: How do I remove HTML from a string?
Der korrekteste Weg (wenn auch nicht der schnellste) ist HTML :: Parser von CPAN zu verwenden. Ein anderer, meist korrekter Weg ist HTML :: FormatText, der nicht nur HTML entfernt, sondern auch versucht, den resultierenden Klartext etwas einfacher zu formatieren.
Viele Leute versuchen einen einfachen Ansatz für reguläre Ausdrücke, wie s/<. *?> // g, aber das scheitert in vielen Fällen, weil die Tags über Zeilenumbrüche fortgesetzt werden können, sie können zitierte spitze Klammern enthalten. oder HTML-Kommentar vorhanden sein. Außerdem vergessen Leute, Entitäten zu konvertieren - wie zum Beispiel <.
Hier ist ein „einfältig“ -Ansatz, die für die meisten Dateien funktionieren:
#!/usr/bin/perl -p0777
s/<(?:[^>'"]*|(['"]).*?\1)*>//gs
Wenn Sie eine vollständigere Lösung wollen, finden Sie in das 3-stufigen striphtml Programm in http://www.cpan.org/authors/id/T/TO/TOMC/scripts/striphtml.gz.
Hier sind einige schwierige Fälle, die Sie denken sollten, wenn eine Lösung Kommissionierung:
<IMG SRC = "foo.gif" ALT = "A > B">
<IMG SRC = "foo.gif"
ALT = "A > B">
<!-- <A comment> -->
<script>if (a<b && a>c)</script>
<# Just data #>
<![INCLUDE CDATA [ >>>>>>>>>>>> ]]>
Wenn HTML-Kommentare andere Tags enthalten, würden diese Lösungen auf Text wie dieser Bruch auch:
<!-- This section commented out.
<B>You can't see me!</B>
-->
Ich würde nicht sagen, könnte, würde ich sagen sollte. Der Versuch, HTML mit Regexes zu bereinigen, ist in der heutigen Zeit absurd. Verwenden Sie eines der zahlreichen HTML-Desinfektionsmodule aus dem CPAN, vorzugsweise etwas, das XSS-Sicherheitslücken verhindern soll und nicht von Daniel Muey geschrieben wurde. –
Vorsicht HTML :: Strip unterstützt UTF-8-codierte Strings nicht korrekt.Hier finden Sie einen Workaround https://gist.github.com/910818 – nick