#!/usr/bin/perl -w use strict; use HTML::Parser; use vars qw(%attribs @elements); @attribs{qw( onblur onchange onclick ondblclick onfocus onkeydown onkeypress onkeyup onload onmousedown onmousemove onmouseout onmouseover onmouseup onreset onselect onsubmit onunload )} ++; @elements = qw( script ); my $parser = HTML::Parser->new( default_h => [ sub { print shift }, 'text' ], start_h => [ \&JSstrip, 'tagname, attr, attrseq' ], ignore_elements => \@elements, ); if ( $ARGV[0] ) { $parser->parse_file( $ARGV[0] ); } else { $parser->parse_file( \*STDIN ); } sub JSstrip { my ( $tagname, $attr, $attrseq ) = @_; print "<$tagname"; foreach (@$attrseq) { # The attribute is a script event handler unless ( exists $attribs{$_} ) { # I'm not sure if this regex is 100% reliable # (esp. in case of escaped quotes?) my $q = $attr->{$_} =~ /"/ ? "'" : '"'; print qq' $_=$q$attr->{$_}$q'; } } print ">"; }