diff --git a/C4/Context.pm b/C4/Context.pm index 85d1c18..ed794a8 100644 --- a/C4/Context.pm +++ b/C4/Context.pm @@ -942,7 +942,9 @@ set_userenv is called in Auth.pm #' sub set_userenv { - my ($usernum, $userid, $usercnum, $userfirstname, $usersurname, $userbranch, $branchname, $userflags, $emailaddress, $branchprinter)= @_; + my ($usernum, $userid, $usercnum, $userfirstname, $usersurname, $userbranch, $branchname, $userflags, $emailaddress, $branchprinter)= + map { utf8::decode($_); $_ } # CGI::Session doesn't handle utf-8, so we decode it here + @_; my $var=$context->{"activeuser"}; my $cell = { "number" => $usernum, diff --git a/C4/ItemType.pm b/C4/ItemType.pm index 70d2690..d7c0615 100644 --- a/C4/ItemType.pm +++ b/C4/ItemType.pm @@ -78,7 +78,7 @@ sub all { for ( @{$dbh->selectall_arrayref( "SELECT * FROM itemtypes ORDER BY description", { Slice => {} })} ) { - utf8::encode($_->{description}); +# utf8::encode($_->{description}); push @itypes, $class->new($_); } return @itypes; diff --git a/C4/Output.pm b/C4/Output.pm index 41a0a28..b256240 100644 --- a/C4/Output.pm +++ b/C4/Output.pm @@ -301,6 +301,7 @@ sub output_with_http_headers($$$$;$) { # utf8::encode($data) if utf8::is_utf8($data); + binmode( STDOUT, ":utf8" ); print $query->header($options), $data; } diff --git a/C4/Search.pm b/C4/Search.pm index 98db887..f8331e0 100644 --- a/C4/Search.pm +++ b/C4/Search.pm @@ -265,6 +265,7 @@ sub SimpleSearch { for my $j ( $first_record..$last_record ) { my $record = $tmpresults[ $i - 1 ]->record( $j-1 )->raw(); # 0 indexed + utf8::decode( $record ); push @{$results}, $record; } } @@ -456,6 +457,7 @@ sub getRecords { # not an index scan else { $record = $results[ $i - 1 ]->record($j)->raw(); + utf8::decode( $record ); # warn "RECORD $j:".$record; $results_hash->{'RECORDS'}[$j] = $record; @@ -476,6 +478,7 @@ sub getRecords { for ( my $j = 0 ; $j < $jmax ; $j++ ) { my $render_record = $results[ $i - 1 ]->record($j)->render(); + utf8::decode($render_record); my @used_datas = (); foreach my $fcode (@fcodes) { @@ -640,6 +643,7 @@ sub pazGetRecords { for (my $i = 0; $i < $count; $i++) { # FIXME -- may need to worry about diacritics here my $rec = $paz->record($recid, $i); + utf8::decode( $rec ); push @{ $result_group->{'RECORDS'} }, $rec; } diff --git a/C4/Templates.pm b/C4/Templates.pm index c2a5911..40e3ab6 100644 --- a/C4/Templates.pm +++ b/C4/Templates.pm @@ -63,6 +63,7 @@ sub new { "$htdocs/$theme/en/includes" ], FILTERS => {}, + ENCODING => 'utf8', # templates don't have BOM, see Template::FAQ } ) or die Template->error(); my $self = { @@ -110,54 +111,14 @@ sub output { # and clean any utf8 mess for my $k ( keys %{ $self->{VARS} } ) { $vars->{$k} = $self->{VARS}->{$k}; - if (ref($vars->{$k}) eq 'ARRAY'){ - utf8_arrayref($vars->{$k}); - } - elsif (ref($vars->{$k}) eq 'HASH'){ - utf8_hashref($vars->{$k}); - } - else { - utf8::encode($vars->{$k}) if utf8::is_utf8($vars->{$k}); - } } my $data; -# binmode( STDOUT, ":utf8" ); $template->process( $self->filename, $vars, \$data ) || die "Template process failed: ", $template->error(); return $data; } -sub utf8_arrayref { - my $arrayref = shift; - foreach my $element (@$arrayref){ - if (ref($element) eq 'ARRAY'){ - utf8_arrayref($element); - next; - } - if (ref($element) eq 'HASH'){ - utf8_hashref($element); - next; - } - utf8::encode($element) if utf8::is_utf8($element); - } -} - -sub utf8_hashref { - my $hashref = shift; - for my $key (keys %{$hashref}){ - if (ref($hashref->{$key}) eq 'ARRAY'){ - utf8_arrayref($hashref->{$key}); - next; - } - if (ref($hashref->{$key}) eq 'HASH'){ - utf8_hashref($hashref->{$key}); - next; - } - utf8::encode($hashref->{$key}) if utf8::is_utf8($hashref->{$key}); - } -} - - + # FIXME - this is a horrible hack to cache # the current known-good language, temporarily # put in place to resolve bug 4403. It is diff --git a/C4/XSLT.pm b/C4/XSLT.pm index 8bc4000..60d3f14 100755 --- a/C4/XSLT.pm +++ b/C4/XSLT.pm @@ -176,6 +176,7 @@ sub XSLTParse4Display { } my $results = $stylesheet->transform($source); my $newxmlrecord = $stylesheet->output_string($results); + utf8::decode( $newxmlrecord ); return $newxmlrecord; } diff --git a/admin/preferences.pl b/admin/preferences.pl index 055f69d..6cbefe3 100755 --- a/admin/preferences.pl +++ b/admin/preferences.pl @@ -34,6 +34,7 @@ use File::Spec; use IO::File; use YAML::Syck qw(); $YAML::Syck::ImplicitTyping = 1; +$YAML::Syck::ImplicitUnicode = 1; # force utf-8 for preference encoding our $lang; # use Smart::Comments; diff --git a/admin/z3950servers.pl b/admin/z3950servers.pl index 44b3967..c6f80e6 100755 --- a/admin/z3950servers.pl +++ b/admin/z3950servers.pl @@ -21,7 +21,7 @@ use strict; #use warnings; FIXME - Bug 2505 -use CGI; +use CGI qw( -utf8 ); use C4::Context; use C4::Auth; use C4::Output; diff --git a/catalogue/search.pl b/catalogue/search.pl index 907efdb..a6948a8 100755 --- a/catalogue/search.pl +++ b/catalogue/search.pl @@ -154,7 +154,7 @@ use C4::Branch; # GetBranches my $DisplayMultiPlaceHold = C4::Context->preference("DisplayMultiPlaceHold"); # create a new CGI object # FIXME: no_undef_params needs to be tested -use CGI qw('-no_undef_params'); +use CGI qw( -no_undef_params -utf8 ); my $cgi = new CGI; my ($template,$borrowernumber,$cookie); diff --git a/cataloguing/z3950_search.pl b/cataloguing/z3950_search.pl index b12a9c9..e6f57e5 100755 --- a/cataloguing/z3950_search.pl +++ b/cataloguing/z3950_search.pl @@ -20,7 +20,7 @@ use strict; #use warnings; FIXME - Bug 2505 -use CGI; +use CGI qw( -utf8 ); use C4::Auth; use C4::Output; diff --git a/members/member.pl b/members/member.pl index e2a6ef5..869237c 100755 --- a/members/member.pl +++ b/members/member.pl @@ -27,7 +27,7 @@ use strict; #use warnings; FIXME - Bug 2505 use C4::Auth; use C4::Output; -use CGI; +use CGI qw( -utf8 ); use C4::Members; use C4::Branch; use C4::Category; diff --git a/opac/opac-search.pl b/opac/opac-search.pl index 716b164..7c3bdff 100755 --- a/opac/opac-search.pl +++ b/opac/opac-search.pl @@ -44,7 +44,7 @@ use Storable qw(thaw freeze); my $DisplayMultiPlaceHold = C4::Context->preference("DisplayMultiPlaceHold"); # create a new CGI object # FIXME: no_undef_params needs to be tested -use CGI qw('-no_undef_params'); +use CGI qw( -no_undef_params -utf8 ); my $cgi = new CGI; BEGIN {