From 744bc3370d539d38dc54b51d066fe07ea50fe938 Mon Sep 17 00:00:00 2001 From: Hector Castro Date: Mon, 11 Jan 2016 22:34:01 -0600 Subject: [PATCH] Bug 15190: Bad utf8 decode to unapi and fixing status code 200 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fix bad utf8 decoding, also fix status code 200 for no parameters passed to script To reproduce the issue in OPAC 1) Copy from LOC (Z39.50) ISBN 8467020113 or test it with whichever record with special characters 2) Open URL in OPAC cgi-bin/koha/unapi?id=koha:biblionumber:4&format=oai_dc play with oai_dc, srw_dc, mods, mods-full, mods3, mods3-full, rdfdc. Note: marcxml does not fail 3) Enter the new biblionumber for ISBN 8467020113 or the record of your choise 4) An oai_dc record will display, notice about the bad utf8 decoding characters 5) Search the record in OPAC 6) To reproduce code 200 Ok and 300 Multiple choices play with: cgi-bin/koha/unapi cgi-bin/koha/unapi?id=koha:biblionumber:4 7) If possible test in NORMARC (UNIMARC will launch an error because bug 15162) Test plan -Apply patch -Follow steps 2 to 6 -You will see no errors in utf8 Followed test plan, works as expected. Signed-off-by: Marc VĂ©ron --- opac/unapi | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/opac/unapi b/opac/unapi index 7b21ee0..1b9281d 100755 --- a/opac/unapi +++ b/opac/unapi @@ -144,14 +144,14 @@ if (not defined $format) { my $parser = XML::LibXML->new(); my $record_dom = $parser->parse_string( $marcxml ); $record_dom = $transformer->transform( $record_dom ); - $content = $record_dom->toString(); + $content = $transformer->output_as_chars( $record_dom ); }; if ($@) { print $cgi->header( -status => '500 internal error ' . $@->code() . ": " . $@->message() ); exit 0; } - print $cgi->header( -type =>'application/xml' ); + print $cgi->header( -type =>'application/xml', -charset => 'UTF-8' ); print $content; } else { # ID is obviously wrong, so 404 @@ -172,7 +172,7 @@ sub emit_formats { if (defined $id) { print $cgi->header( -type =>'application/xml', -status => '300 multiple choices' ); } else { - print $cgi->header( -type =>'application/xml' ); + print $cgi->header( -type =>'application/xml', -status => '200 Ok' ); } print "\n"; -- 1.7.10.4