>The Filter File</TITLE
><META
NAME="GENERATOR"
-CONTENT="Modular DocBook HTML Stylesheet Version 1.60"><LINK
+CONTENT="Modular DocBook HTML Stylesheet Version 1.76b+
+"><LINK
REL="HOME"
-TITLE="Privoxy User Manual"
+TITLE="Privoxy 3.1.1 User Manual"
HREF="index.html"><LINK
REL="PREVIOUS"
TITLE="Actions Files"
><DIV
CLASS="NAVHEADER"
><TABLE
+SUMMARY="Header navigation table"
WIDTH="100%"
BORDER="0"
CELLPADDING="0"
><TH
COLSPAN="3"
ALIGN="center"
->Privoxy User Manual</TH
+>Privoxy 3.1.1 User Manual</TH
></TR
><TR
><TD
VALIGN="bottom"
><A
HREF="actions-file.html"
+ACCESSKEY="P"
>Prev</A
></TD
><TD
VALIGN="bottom"
><A
HREF="templates.html"
+ACCESSKEY="N"
>Next</A
></TD
></TR
><H1
CLASS="SECT1"
><A
-NAME="FILTER-FILE"
->9. The Filter File</A
-></H1
+NAME="FILTER-FILE">9. The Filter File</H1
><P
> All text substitutions that can be invoked through the
<TT
HREF="actions-file.html"
>actions files</A
>, the
- filter file is organized in sections, which are called <I
+ filter file is organized in sections, which are called <SPAN
+CLASS="emphasis"
+><I
CLASS="EMPHASIS"
>filters</I
+></SPAN
>
here. Each filter consists of a heading line, that starts with the
- <I
+ <SPAN
+CLASS="emphasis"
+><I
CLASS="EMPHASIS"
>keyword</I
+></SPAN
> <TT
CLASS="LITERAL"
>FILTER:</TT
>, followed by
- the filter's <I
+ the filter's <SPAN
+CLASS="emphasis"
+><I
CLASS="EMPHASIS"
>name</I
+></SPAN
>, and a short (one line)
- <I
+ <SPAN
+CLASS="emphasis"
+><I
CLASS="EMPHASIS"
>description</I
+></SPAN
> of what it does. Below that line
- come the <I
+ come the <SPAN
+CLASS="emphasis"
+><I
CLASS="EMPHASIS"
>jobs</I
+></SPAN
>, i.e. lines that define the actual
text substitutions. By convention, the name of a filter
- should describe what the filter <I
+ should describe what the filter <SPAN
+CLASS="emphasis"
+><I
CLASS="EMPHASIS"
>eliminates</I
+></SPAN
>. The
comment is used in the <A
HREF="http://config.privoxy.org/"
> operator. If you are familiar with Perl, you
will find this to be quite intuitive, and may want to look at the
<A
-HREF="http://www.oesterhelt.org/pcrs/pcrs.1.html"
+HREF="http://www.oesterhelt.org/pcrs/pcrs.3.html"
TARGET="_top"
>PCRS man page</A
>
><H2
CLASS="SECT2"
><A
-NAME="AEN2909"
->9.1. Filter File Tutorial</A
-></H2
+NAME="AEN3018">9.1. Filter File Tutorial</H2
><P
> Now, let's complete our <SPAN
CLASS="QUOTE"
></TABLE
></P
><P
-> But wait! Didn't the comment say that <I
+> But wait! Didn't the comment say that <SPAN
+CLASS="emphasis"
+><I
CLASS="EMPHASIS"
>all</I
+></SPAN
> occurrences
of <SPAN
CLASS="QUOTE"
matches <SPAN
CLASS="QUOTE"
>"<script"</SPAN
->, followed by <I
+>, followed by <SPAN
+CLASS="emphasis"
+><I
CLASS="EMPHASIS"
>any</I
+></SPAN
> text, i.e.
it matches the whole page, from the start of the first <script> tag.</P
><P
CLASS="QUOTE"
>"document.referrer"</SPAN
>. The dot needed to
- be <I
+ be <SPAN
+CLASS="emphasis"
+><I
CLASS="EMPHASIS"
>escaped</I
+></SPAN
>, i.e. preceded by a backslash, to take away its
special meaning as a joker, and make it just a regular dot. So far, the meaning is:
Match from the start of the first <script> tag in a the page, up to, and including,
the text <SPAN
CLASS="QUOTE"
>"document.referrer"</SPAN
->, if <I
+>, if <SPAN
+CLASS="emphasis"
+><I
CLASS="EMPHASIS"
>both</I
+></SPAN
> are present
in the page (and appear in that order).</P
><P
text in between <SPAN
CLASS="QUOTE"
>"<script"</SPAN
-> and the <I
+> and the <SPAN
+CLASS="emphasis"
+><I
CLASS="EMPHASIS"
>first</I
+></SPAN
> occurrence
of <SPAN
CLASS="QUOTE"
CLASS="LITERAL"
>.*</TT
> will
- only span the text up to the <I
+ only span the text up to the <SPAN
+CLASS="emphasis"
+><I
CLASS="EMPHASIS"
>first</I
+></SPAN
> <SPAN
CLASS="QUOTE"
>"</script>"</SPAN
<TT
CLASS="LITERAL"
>"Not Your Business!"</TT
-> (<I
+> (<SPAN
+CLASS="emphasis"
+><I
CLASS="EMPHASIS"
>including</I
+></SPAN
>
the quotation marks!), followed by the text remembered as <TT
CLASS="LITERAL"
CLASS="SCREEN"
># The status bar is for displaying link targets, not pointless blahblah
#
-s/window\.status\s*=\s*['"].*?['"]/dUmMy=1/ig</PRE
+s/window\.status\s*=\s*(['"]).*?\1/dUmMy=1/ig</PRE
></TD
></TR
></TABLE
> construct means: <SPAN
CLASS="QUOTE"
>"a single
- <I
+ <SPAN
+CLASS="emphasis"
+><I
CLASS="EMPHASIS"
>or</I
+></SPAN
> a double quote"</SPAN
->.</P
+>. Finally, <TT
+CLASS="LITERAL"
+>\1</TT
+> is
+ a backreference to the first parenthesis just like <TT
+CLASS="LITERAL"
+>$1</TT
+> above,
+ with the difference that in the <SPAN
+CLASS="emphasis"
+><I
+CLASS="EMPHASIS"
+>pattern</I
+></SPAN
+>, a backslash indicates
+ a backreference, whereas in the <SPAN
+CLASS="emphasis"
+><I
+CLASS="EMPHASIS"
+>substitute</I
+></SPAN
+>, it's the dollar.</P
><P
> So what does this job do? It replaces assignments of single- or double-quoted
strings to the <SPAN
CLASS="SCREEN"
># Kill OnUnload popups. Yummy. Test: http://www.zdnet.com/zdsubs/yahoo/tree/yfs.html
#
-s/(<body .*)onunload(.*>)/$1never$2/iU</PRE
+s/(<body [^>]*)onunload(.*>)/$1never$2/iU</PRE
></TD
></TR
></TABLE
TARGET="_top"
>OnUnload
event binding</A
-> in the HTML DOM was a <I
+> in the HTML DOM was a <SPAN
+CLASS="emphasis"
+><I
CLASS="EMPHASIS"
>CRIME</I
+></SPAN
>.
When I close a browser window, I want it to close and die. Basta.
This job replaces the <SPAN
CLASS="LITERAL"
>i</TT
> option makes the pattern matching
- case-insensitive.</P
+ case-insensitive. Also note that ungreedy matching alone doesn't always guarantee
+ a minimal match: In the first parenthesis, we had to use <TT
+CLASS="LITERAL"
+>[^>]*</TT
+>
+ instead of <TT
+CLASS="LITERAL"
+>.*</TT
+> to prevent the match from exceeding the
+ <body> tag if it doesn't contain <SPAN
+CLASS="QUOTE"
+>"OnUnload"</SPAN
+>, but the page's
+ content does.</P
><P
> The last example is from the fun department:</P
><P
CLASS="QUOTE"
>"microsoft"</SPAN
>
- in the page. This prevents links to microsoft.com from being messed, while
+ in the page. This prevents links to microsoft.com from being trashed, while
still replacing the word everywhere else.</P
><P
> <TABLE
#
s* industry[ -]leading \
| cutting[ -]edge \
+| customer[ -]focused \
+| market[ -]driven \
| award[ -]winning # Comments are OK, too! \
| high[ -]performance \
| solutions[ -]based \
CLASS="LITERAL"
>x</TT
> option in this job turns on extended syntax, and allows for
- e.g. the liberal use of (non-interpreted!) whitespace for nicer formatting.</P
+ e.g. the liberal use of (non-interpreted!) whitespace for nicer formatting. </P
><P
> You get the idea?</P
></DIV
><HR
ALIGN="LEFT"
WIDTH="100%"><TABLE
+SUMMARY="Footer navigation table"
WIDTH="100%"
BORDER="0"
CELLPADDING="0"
VALIGN="top"
><A
HREF="actions-file.html"
+ACCESSKEY="P"
>Prev</A
></TD
><TD
VALIGN="top"
><A
HREF="index.html"
+ACCESSKEY="H"
>Home</A
></TD
><TD
VALIGN="top"
><A
HREF="templates.html"
+ACCESSKEY="N"
>Next</A
></TD
></TR