Logo: Proxomitron - Ein Universeller Webfilter

Programmoberfläche: Webseiten-Filter

Filterübersicht / Steuerung

Fenster mit Liste der Seitenfilter

In diesem Fenster kannst du die einzelnen Webseiten-Filter aktivieren und deaktivieren.

Schaltflächen im Bereich "Optionen"
Bearb.
Öffnet den in der Liste ausgewählten Filter zum Bearbeiten im Filtereditor. (Ein Doppelklick auf den Filternamen bewirkt das gleiche.)
Neu
Legt einen neuen Filter an und öffnet ihn im Filtereditor.
Kopie
Erzeugt eine Kopie des in der Liste ausgewählten Filters und öffnet sie im Filtereditor.
Ausschn.
Schneidet den oder die in der Liste ausgewählten Filter aus.
Einfüg.
Fügt vorher ausgeschnittene Filter oberhalb des in der Liste ausgewählten Filters ein.
Suchen
Wenn man in das Suchfeld eine Zeichenfolge eingibt, dann werden nur noch die Filter angezeigt, in deren Namen diese Zeichenfolge vorkommt.
Häkchen/Anklickkästchen/Checkbuttons
Das Häkchen neben jedem Filter bestimmt, ob er eingeschaltet ist. Wenn man mehrere Filter in der Liste ausgewählt hat, kann man alle gemeinsam ein- oder ausschalten, indem man eines der Kästchen mit der rechten Maustaste anklickt.

Hinweis: Das Ausschneiden und Einfügen von Filtern mit Hilfe der beiden Schaltflächen ist ein rein interner Vorgang. Um Filter in die Zwischenablage zu exportieren oder daraus zu importieren, müssen die entsprechenden Befehle im Kontextmenü benutzt werden. Mehr dazu im folgenden Abschnitt...

Importieren / Exportieren von Filtern

Kontextmenü des in der Übersicht markierten Filters

Nach einem Rechtsklick auf einen oder mehrere markierte Filter erscheint ein Kontextmenü, über das Filter entweder als Text in die Zwischenablage exportiert oder umgekehrt daraus importiert werden können. Diese Funktion ist z.B. nützlich, wenn zusätzliche Filter aus einem Diskussionsforum eingefügt oder eigene Filter in ein Forum gestellt werden sollen.

Fehlermeldung: Die Zwischenablage enthält keinen gültigen Filter.

Beim Importieren von Filtern aus der Zwischenablage kann es passieren, dass Proxomitron den Filter als fehlerhaft ablehnt. Wenn das passiert, dann stimmt irgend etwas mit dem grundsätzlichen Format des Filters nicht. Oft liegt es daran, dass der Filter unvollständig markiert und dadurch unvollständig in die Zwischenablage kopiert worden ist, sodass Zeilen oder Zeichen fehlen.

Manchmal gibt es auch Probleme mit den Leerzeichen, mit denen Proxomitron manche Zeilen einrückt. Da eine Kette aus mehreren normalen Leerzeichen in HTML-Seiten immer auf ein einzelnes Leerzeichen reduziert wird, ersetzen manche Diskussionsforen und ähnliche Systeme derartige Ketten automatisch durch abwechselnde Folgen aus normalen und nicht umbrechenden Leerzeichen. Je nach Browser werden diese zwei Typen von Leerzeichen auch beim Kopieren in die Zwischenablage als unterschiedliche Zeichen beibehalten. Diese nicht-normalen Leerzeichen müssen erst einmal durch normale ersetzt werden, bevor Proxomitron den Filter importieren kann.

Editor für Webseitenfilter

Fenster des Seitenfilter-Editors

Wenn du einen Seitenfilter bearbeitest oder einen neuen schreibst, dann passiert das normalerweise in diesem Fenster.

Filtername
Du kannst deine Webseiten-Filter beliebig benennen. (Bei den Header-Filtern ist das anders!) Ich empfehle dir aber, die Namen wie ich zu strukturieren.
Bereich "Begrenzung (Scope)"
URL-Entsprechnung (URL Match)

Bevor ein Filter ausgeführt wird, prüft Proxomitron, ob in diesem Feld etwas steht. Wenn ja, wird der Filter nur dann ausgeführt, wenn der in diesem Feld eingetragene Ausdruck auf den URL der betroffenen Seite bzw. Datei zutrifft.

Der Vergleich erfolgt allerdings nicht 1 zu 1, sondern nach folgendem Schema:

  1. URLs werden ohne Protokollangabe betrachtet.
    Eine URL-Entsprechung, die auf die Seite http://www.buerschgens.de/ zutreffen soll, muss also www.buerschgens.de/ heißen.
  2. Der Ausdruck muss nicht den vollen URL erfassen. URLs werden als "zum Ende hin offen" betrachtet.
    Wenn die URL-Entsprechung also www.buerschgens.de/Prox/ lautet, dann erfasst sie alle URLs, die mit dieser Zeichenfolge beginnen. Beispielsweise www.buerschgens.de/Prox/Seiten/Datei.html. Wenn dieses Verhalten nicht gewünscht ist, muss der Ausdruck mit (^?) abgeschlossen werden.
  3. Wenn SSL-verschlüsselte Seiten gefiltert werden und die URLs mit https:// beginnen, dann muss in der URL-Entsprechung zusätzlich die SSL-Portnummer 443 angegeben werden.
    Wenn also der URL https://www.buerschgens.de/Prox/ erfasst werden soll, dann muss die URL-Entsprechung www.buerschgens.de:443/Prox/ lauten. Der Grund für diese Besonderheit ist übrigens nicht etwa Gemeinheit des Programmautors, sondern, dass der URL, den der Browser an Proxomitron sendet, tatsächlich so aufgebaut ist. Browser zeigen die Portnummer nur normalerweise nicht in der Adresszeile an.

Wenn als URL-Entsprechung der Ausdruck *.de angegeben ist, dann wird der Filter nur auf Seiten von deutschen Domains angewandt. Wenn im Feld statt dessen (^*.de) steht, wird der Filter auf alle Seiten von nicht-deutschen Domains angewandt.

In diesem Feld ist der volle Satz an Befehlen und Metazeichen zulässig.

Eingrenzende Entsprechung (Bounds Match)

Die eingrenzende Entsprechung ist eine Möglichkeit, dem Vergleichsausdruck einen (meistens einfacheren) Vor-Ausdruck vorzuschalten, der die Quelltextbereiche auswählt, auf die danach der eigentliche Vergleichsausdruck angewandt werden soll.

In der eingrenzenden Entsprechung können alle Befehle, Metazeichen und Funktionen benutzt werden, die im Vergleichsausdruck benutzt werden können.

Wichtig: Sobald eine eingrenzende Entsprechung benutzt wird, wird der vom Filter bearbeitete Quelltextbereich nicht mehr durch den Vergleichsausdruck, sondern durch die eingrenzende Entsprechung festgelegt. Der Vergleichsausdruck muss dann unbedingt so formuliert werden, dass er den gesamten, von der eingrenzenden Entsprechung abgesteckten Quelltextbereich erfassen kann. Wenn das nicht beachtet wird, funktioniert der Filter nicht.

Wenn dein Filter z.B., wie auf dem Bild, nur innerhalb des öffnenden TABLE-Tags wirken soll, dann kannst du das im Vorhinein festlegen, indem du als eingrenzende Entsprechung einen Ausdruck wie <table*> einträgst. (Auf dem Bild wird statt dessen die Funktion $NEST() benutzt. Die Auswirkung ist in diesem Fall die gleiche.)

Byte-Limit

Als weitere Eingrenzungsmöglichkeit gibt es das Byte-Limit. Hier musst du immer einen Wert eintragen. Dieser Wert sollte nicht zu klein gewählt werden.

Während ein Filter eine Seite überprüft, sieht er immer nur einen Ausschnitt von x Bytes. Dieser Ausschnitt wird als Betrachtungsfenster oder Betrachtungsbereich bezeichnet. Die Größe des Betrachtungsbereichs wird von Proxomitron normalerweise dynamisch angepasst.

Zuerst wird nur der erste Teil des Vergleichsausdrucks gesucht. Wenn dieser erste Teil zutrifft, wird der Betrachtungsbereich vergrößert und dabei geprüft, ob der hinzukommende Quelltext auf den nächsten Teil des Vergleichsausdrucks zutrifft. Proxomitron arbeitet sich also schrittweise durch den Vergleichsausdruck und vergrößert dabei nach Bedarf das Betrachtungsfenster.

Das geht im Normalfall so lange weiter, bis das Ende des Vergleichsausdrucks erreicht ist und dieser komplett auf den betrachteten Quelltextbereich zutrifft und der Filter damit wahr wird, oder bis ein Punkt erreicht wird, ab dem der Vergleichsausdruck nicht mehr auf den betrachteten Quelltext zutrifft und der Filter unwahr wird. Wenn das passiert, bricht der Filter die Verarbeitung des Vergleichsausdrucks ab, schiebt den Anfang des Betrachtungsfensters ein Stück weiter im Quelltext und beginnt dort erneut mit der Suche nach einer Übereinstimmung mit dem Vergleichsausdruck.

Das Byte-Limit gibt an, wie groß der vom Vergleichsausdruck umspannnte Quelltextbereich maximal sein darf. Es ist also eine zusätzliche Obergrenze, die im Normalfall nicht erreicht werden sollte.

Der eingestellte Wert muss auf jeden Fall mindestens so groß sein, dass der Filter den in den Feldern "Eingrenzende Entsprechung" und "Vergleichsausdruck" festgelegten Bereich von Anfang bis zum Ende überblicken kann. Wenn du das Limit zu klein wählst, kann der Filter nicht gleichzeitig Anfang und Ende des zu bearbeitenden Quelltextes sehen und wird deshalb immer wieder ergebnislos abbrechen.

Der oft zu lesende Ratschlag, das Byte-Limit möglichst klein zu wählen, weil Proxomitron ansonsten zu viel puffern würde, ist nur in wenigen Fällen wirklich sinnvoll. Eingrenzende Entsprechung und Vergleichsausdruck sollten grundsätzlich so formuliert werden, dass sie nur die nötigste Menge Quelltext umspannen. Ein Filter, dessen Vergleichsausdruck sich immer wieder bis zum Byte-Limit ausdehnt und dann abbricht, verschwendet massiv Rechenzeit.

Mehrfache Verarbeitung erlauben

Wenn ein Filter ein Stück Quelltext verändert hat, dann markiert er es intern als "bearbeitet". Alle weiteren Filter überspringen diesen Abschnitt dann.

Oftmals ist es aber nötig, dass ein Stück Quelltext von mehreren Filtern nacheinander verarbeitet wird. Wenn man die Option "Mehrfache Verarbeitung erlauben" einschaltet, markiert der Filter den veränderten Quelltext nicht als "bearbeitet", sodass andere Filter ihn weiter bearbeiten können.

Unabhängig von dieser Option kann Quelltext normalerweise nicht zweimal durch den selben Filter verarbeitet werden. Das ist eine Schutzvorkehrung, mit der Proxomitron das Risiko von Endlosschleifen reduziert.

Bereich "Suchen und Ersetzen"
Vergleichsausdruck (Matching Expression)

In dieses Feld wird der Ausdruck eingetragen, der den zu suchenden Quelltext beschreibt.

Die wichtigsten Metazeichen und Befehle findest du in der Befehlsreferenz.

Zeilenumbrüche haben keinerlei Einfluss auf die Funktion des Filterausdrucks. Sie können deshalb beliebig zur Strukturierung und besseren Übersicht eingefügt werden. Falls Zeilenumbrüche durch Filter erfasst oder eingefügt werden sollen, müssen entsprechende Metazeichen benutzt werden.

Ersetzungsausdruck (Replacement Text)

In dieses Feld wird der Text eingetragen, durch den der vom Vergleichsausdruck erfasste Text ersetzt werden soll.

Normalerweise will man zumindest einen Teil des ursprünglichen Quelltexts in das Endergebnis übernehmen. Dazu speichert man ihn im Vergleichsausdruck in eine oder mehrere Variablen und gibt diese dann im Ersetzungsausdruck an den Stellen an, an denen ihr jeweiliger Inhalt eingefügt werden soll.

Der im Bild gezeigte Filter sucht nach Zeichenfolgen und speichert alles was dazwischen liegt in Variablen. Beim Ersetzen werden die Inhalte der Variablen zusätzlich zum ersetzten Text wieder eingesetzt, sodass im Endeffekt nur die Angabe border="?" auf border="1" festgelegt wird.

Eine grundlegende Erklärung der Filtersprache findest du im Bereich "Die Filtersprache".

[Test]
öffnet das Testfenster.

Kontextmenüs

In den Kontextmenüs der verschiedenen Eingabefelder verstecken sich teilweise sehr nützliche Funktionen.

Kontextmenü des Feldes URL-Entsprechung Kontextmenü des Feldes URL-Entsprechung Kontextmenü des Feldes URL-Entsprechung
Menüpunkt "Testen"
Ist für alle Felder verfügbar, in die reguläre Ausdrücke eingetragen werden. Ein Klick darauf öffnet das Testfenster (siehe unten), in dem der jeweilige Ausdruck offline getestet werden kann.
Untermenü "Liste einbind."
Enthält alle in der Konfiguration vorhandenen Listen. Ein Klick auf einen der Listennamen fügt einen Listenaufruf im Format $LST(<Listenname>) in den Ausdruck ein.
Untermenü "Liste öffnen"
Enthält alle in der Konfiguration vorhandenen Listen und zeigt daneben auch die jeweiligen Dateinamen an. Ein Klick auf eine der Listen öffnet die jeweilige Datei zum Bearbeiten im Texteditor.
Menüpunkt "Datei-URL einfügen"
Fügt einen Datei-URL im Format file:///C|/Ordner/Datei..txt ein.

Filter-Testfenster

Das Testfenster bietet die Möglichkeit, Ausdrücke offline zu testen. Es kann für alle Eingabefelder und Eingabezeilen aufgerufen werden, in die man Vergleichsausdrücke eingeben kann.

Die Schaltfläche [Test] im Filter-Editor öffnet das Testfenster für den Haupt-Vergleichsausdruck des Filters. Für URL-Entsprechung und Eingrenzende Entsprechung lässt sich das Testfenster jeweils über das Kontextmenü aufrufen.

Funktion: [Test]

Testfenster für Filter und Ausdrücke: Test eines Filters

Das Filter-Testfenster besteht aus zwei Feldern. In das obere Feld trägt man den Testquelltext ein, der vom Filter verarbeitet werden soll. Im unteren Feld erscheint das Ergebnis des Tests bzw. der Auswertung.

Die Testfunktion wendet den aktuellen Filter auf den Testquelltext an und zeigt das Resultat im Ergebnisfeld. Wenn der Filter durch den Testquelltext nicht ausgelöst wurde, also nichts finden konnte, was dem Vergleichsausdruck entspricht, dann erscheint als Ergebnis "[No Match]". Wenn das Ergebnisfeld ganz leer bleibt, dann heißt das, dass der Filter den gegebenen Quelltext vollständig entfernen würde. Der Grund dafür steht in der Anleitung zur Filtersprache.

Funktion: [Auswertung]

Testfenster für Filter und Ausdrücke: Auswertung eines Filters

Die Auswertungsfunktion dient dazu, die Effizienz eines Filters zu bestimmen und hilft so bei der Optimierung von Ausdrücken.

Die Funktion wendet den aktuellen Filter normalerweise 1000 mal nacheinander auf den gegebenen Testquelltext an und gibt als Ergebnis die durchschnitliche Verarbeitungszeit für einen einzelnen Durchlauf in Millisekunden an. Wenn die Auswertung also 2 Sekunden dauert, dann erscheint als Ergebnis: "Avg time: 2.000000 (milliseconds)"

Damit die Auswertung eines extrem ineffizienten Filters nicht zu lange dauert, ist die Auswertungszeit auf 6 Sekunden begrenzt. Wenn diese Zeit erreicht wird, wird die Wiederholung abgebrochen und das Ergebnis aus den in dieser Zeit verarbeiteten Durchläufen errechnet. Wenn also nur 300 Durchläufe in 6 Sekunden geschafft wurden, dann ist das Ergebnis: "Avg time: 20.000000 (milliseconds)"

So langsam sollte kein Filter sein! Früher waren einige Millisekunden pro Filter noch normal. Auf aktuellen PCs werden so einfache Filter wie der auf den Bildern dargestellte aber in kaum noch messbarer Zeit verarbeitet.

Die untere Darstellungsgrenze der Auswertungsfunktion liegt ungefähr bei 16 Mikrosekunden (0.016000 Millisekunden). Darunter erscheint als Laufzeit nur noch "Avg time: 0.000000 (milliseconds)". Um einfache Filter dennoch beurteilen zu können, muss deshalb ein entsprechend langer Testquelltext benutzt werden.

© Michael Bürschgens <website@proxomitron.de>