Projekt

Allgemein

Profil

« Zurück | Weiter » 

Revision 29379d95

Von Sven Schöling vor mehr als 11 Jahren hinzugefügt

  • ID 29379d95dee7886c804cc695a710bbb4f08c1be6
  • Vorgänger 83fb0fe0
  • Nachfolger e4b304dc

Javascript escape nach Ecmascript Spec.

Es gab einen Eckfall mit CR wo das kaputt gegangen ist, Spec kennt
noch als weitere Randfälle TAB, VT, ' und BS

Unterschiede anzeigen:

SL/Template/Plugin/JavaScript.pm
17 17
# public interface
18 18
#
19 19

  
20
# see ecmascript spec section 7.8.4
21
my @escape_chars = ('\\', '\'', '"');
22
my %control_chars = (
23
  "\n"   => 'n',
24
  "\t"   => 't',
25
  "\r"   => 'r',
26
  "\f"   => 'f',
27
  "\x08" => 'b',
28
  "\x0B" => 'v', # noone uses vertical tab anyway...
29
);
30
my $re = join '', map { qr/($_)/s } join '|', keys(%control_chars), map { "\Q$_\E" } @escape_chars;
31

  
20 32
sub escape {
21 33
  my $self = shift;
22 34
  my $text = shift;
23 35

  
24
  $text =~ s|\\|\\\\|g;
25
  $text =~ s|\"|\\\"|g;
26
  $text =~ s|\n|\\n|g;
36
  $text =~ s/$re/'\\' . ($control_chars{$1} || $1)/egs;
27 37

  
28 38
  return $text;
29 39
}

Auch abrufbar als: Unified diff