]> wagnertech.de Git - kivitendo-erp.git/blobdiff - SL/HTML/Util.pm
Refactoring: {strip,restrict}_html in eigene Module ausgelagert
[kivitendo-erp.git] / SL / HTML / Util.pm
diff --git a/SL/HTML/Util.pm b/SL/HTML/Util.pm
new file mode 100644 (file)
index 0000000..7212d64
--- /dev/null
@@ -0,0 +1,62 @@
+package SL::HTML::Util;
+
+use strict;
+use warnings;
+
+use HTML::Parser;
+
+my %stripper;
+
+sub strip {
+  my ($class_or_value) = @_;
+
+  my $value = !ref($class_or_value) && (($class_or_value // '') eq 'SL::HTML::Util') ? $_[1] : $class_or_value;
+
+  if (!%stripper) {
+    %stripper = ( parser => HTML::Parser->new );
+
+    $stripper{parser}->handler(text => sub { $stripper{text} .= $_[1]; });
+  }
+
+  $stripper{text} = '';
+  $stripper{parser}->parse($value);
+  $stripper{parser}->eof;
+
+  return delete $stripper{text};
+}
+
+1;
+__END__
+
+=pod
+
+=encoding utf8
+
+=head1 NAME
+
+SL::HTML::Util - Utility functions dealing with HTML
+
+=head1 SYNOPSIS
+
+  my $plain_text = SL::HTML::Util->strip('<h1>Hello World</h1>');
+
+=head1 FUNCTIONS
+
+=over 4
+
+=item C<strip $html_content>
+
+Removes all HTML elements and tags from C<$html_content> and returns
+the remaining plain text.
+
+=back
+
+=head1 BUGS
+
+Nothing here yet.
+
+=head1 AUTHOR
+
+Moritz Bunkus E<lt>m.bunkus@linet-services.deE<gt>
+
+=cut