From 84462feb67da40885fb0eb83ca6fd611278e4189 Mon Sep 17 00:00:00 2001 From: Dobrica Pavlinusic Date: Tue, 27 Dec 2005 23:24:36 +0000 Subject: [PATCH] r369@athlon: dpavlin | 2005-12-28 00:27:13 +0100 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 | 2 +- lib/WebPAC/Output/TT.pm | 29 +++++++++++++++++++++++++++-- 2 files changed, 28 insertions(+), 3 deletions(-) diff --git a/Makefile.PL b/Makefile.PL index d842dbe..fefe6a6 100644 --- a/Makefile.PL +++ b/Makefile.PL @@ -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, diff --git a/lib/WebPAC/Output/TT.pm b/lib/WebPAC/Output/TT.pm index 02a14d6..c87d3e2 100644 --- a/lib/WebPAC/Output/TT.pm +++ b/lib/WebPAC/Output/TT.pm @@ -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<< >> -- 2.20.1