From e1b230fe59be9f2cfdf7c3c47af72abc219174b4 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 Content-Type: text/plain; charset=utf-8 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 Veron Signed-off-by: Marcel de Rooy --- 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