r369@athlon: dpavlin | 2005-12-28 00:27:13 +0100
authorDobrica Pavlinusic <dpavlin@rot13.org>
Tue, 27 Dec 2005 23:24:36 +0000 (23:24 +0000)
committerDobrica Pavlinusic <dpavlin@rot13.org>
Tue, 27 Dec 2005 23:24:36 +0000 (23:24 +0000)
 try to fix encodings in JavaScript strings (broken)

git-svn-id: svn+ssh://mjesec/home/dpavlin/svn/webpac2/trunk@331 07558da8-63fa-0310-ba24-9fe276d99e06

Makefile.PL
lib/WebPAC/Output/TT.pm

index d842dbe..fefe6a6 100644 (file)
@@ -23,7 +23,7 @@ WriteMakefile(
        'Time::HiRes' => 0,
        'File::Temp' => 0,
        'List::Util' => 0,
-       'URI::Escape' => 0,
+       'Encode' => 0,
        'LWP' => 0,
        'File::Path' => 0,
        'Biblio::Isis' => 0.13,
index 02a14d6..c87d3e2 100644 (file)
@@ -8,7 +8,7 @@ use base qw/WebPAC::Common/;
 use Template;
 use List::Util qw/first/;
 use Data::Dumper;
-use URI::Escape qw/uri_escape_utf8/;
+use Encode;
 
 =head1 NAME
 
@@ -198,7 +198,7 @@ filter to return links to search, usage in TT:
                                                $s = $item->{'search'}->[0];
                                        }
                                        #$s =~ s/([^\w.-])/sprintf("%%%02X",ord($1))/eg;
-                                       $s = uri_escape_utf8( $s );
+                                       $s = __quotemeta( $s );
 
                                        my $d = $item->{'display'}->[$i] || die "can't find value $i for type display in field $display";
 
@@ -311,6 +311,31 @@ sub to_file {
 }
 
 
+=head2 __quotemeta
+
+Helper to quote JavaScript-friendly characters
+
+=cut
+
+sub __quotemeta {
+       local $_ = shift;
+       $_ = decode('iso-8859-2', $_);
+
+       s<([\x{0080}-\x{fffd}]+)>{sprintf '\u%0*v4X', '\u', $1}ge if ( Encode::is_utf8($_) );
+       {
+               use bytes;  
+               s<((?:[^ \x21-\x7E]|(?:\\(?!u)))+)>{sprintf '\x%0*v2X', '\x', $1}ge;
+       }
+
+       s/\\x09/\\t/g;
+       s/\\x0A/\\n/g;
+       s/\\x0D/\\r/g;
+       s/"/\\"/g;
+       s/\\x5C/\\\\/g;
+
+       return $_;
+}
+
 =head1 AUTHOR
 
 Dobrica Pavlinusic, C<< <dpavlin@rot13.org> >>