package Valiant::Filter::HtmlEscape; use Moo; use Valiant::Util 'throw_exception'; with 'Valiant::Filter::Each'; sub normalize_shortcut { my ($class, $arg) = @_; return +{ }; } sub filter_each { my ($self, $class, $attrs, $attribute_name) = @_; my $value = $attrs->{$attribute_name}; return unless defined $value; $value =~ s/&(?!(amp|lt|gt|quot);)/&/g; $value =~ s//>/g; $value =~ s/\"/"/g; return $value; } 1; =head1 NAME Valiant::Filter::HtmlEscape - HTML escaping on strings =head1 SYNOPSIS package Local::Test::User; use Moo; use Valiant::Filters; has 'name' => (is=>'ro', required=>1); filters name => ( html_escape => 1, ); my $user = Local::Test::User->new(name=>'john'); print $user->name; # '<a>john</a>' =head1 DESCRIPTION This is a very simple filter that takes no paramters and HTML escapes any incoming strings. Useful to help with stuff like cross scripting attacks, etc. Please be aware that the regexp for this might be too simple for truly hardening your code; please review. =head1 SEE ALSO L, L, L. =head1 AUTHOR See L =head1 COPYRIGHT & LICENSE See L =cut