Presenter::EscapedText: quote_html nicht über $::locale laufen lassen
authorSven Schöling <s.schoeling@linet-services.de>
Wed, 27 Dec 2017 10:08:52 +0000 (11:08 +0100)
committerSven Schöling <s.schoeling@linet-services.de>
Tue, 2 Jan 2018 13:00:42 +0000 (14:00 +0100)
Die quote_html Liste in speacial_chars ist extrem langsam. Für HTML
Generierung lieber diese optimierte nehmen.

SL/Presenter/EscapedText.pm

index 2fc04fd..ca3c8ca 100644 (file)
@@ -10,6 +10,14 @@ use JSON ();
 
 use overload '""' => \&escaped_text;
 
+my %html_entities = (
+  '<' => '&lt;',
+  '>' => '&gt;',
+  '&' => '&amp;',
+  '"' => '&quot;',
+  "'" => '&apos;',
+);
+
 # static constructors
 sub new {
   my ($class, %params) = @_;
@@ -17,11 +25,17 @@ sub new {
   return $params{text} if ref($params{text}) eq $class;
 
   my $self      = bless {}, $class;
-  $self->{text} = $params{is_escaped} ? $params{text} : $::locale->quote_special_chars('HTML', $params{text});
+  $self->{text} = $params{is_escaped} ? $params{text} : quote_html($params{text});
 
   return $self;
 }
 
+sub quote_html {
+  return undef unless defined $_[0];
+  (my $x = $_[0]) =~ s/(["'<>&])/$html_entities{$1}/ge;
+  $x
+}
+
 sub escape {
   __PACKAGE__->new(text => $_[0]);
 }