use HTML::Parser;
my %stripper;
+my %entities = (
+ 'lt' => '<',
+ 'gt' => '>',
+ 'amp' => '&',
+);
sub strip {
my ($class_or_value) = @_;
my $value = !ref($class_or_value) && (($class_or_value // '') eq 'SL::HTML::Util') ? $_[1] : $class_or_value;
+ return '' unless defined $value;
+
+ # Remove HTML comments.
+ $value =~ s{ <!-- .*? --> }{}gx;
+
if (!%stripper) {
%stripper = ( parser => HTML::Parser->new );
$stripper{parser}->parse($value);
$stripper{parser}->eof;
+ $stripper{text} =~ s{\&([^;]+);}{ $entities{$1} || "\&$1;" }eg;
+
return delete $stripper{text};
}