[RM-33835]: <SPU> ตรวจสอบและแก้ไข อีเมลจาก Suggestions pending approval แสดงข้อมูลเพี้ยน

Viewed 0

Problem Summary

From Redmine:
รบกวนช่วยตรวจสอบอีเมลจาก Suggestions pending approval ให้หน่อยนะครับ
ข้อความเป็นภาษาต่างดาวครับ

Root Cause Analysis

ปัญหาเกิดจากการเข้ารหัสภาษา (Encoding) ซ้ำซ้อนในสคริปต์ opac/opac-suggestions.pl ในขั้นตอนการบันทึกคำแนะนำ (Suggestion) ใหม่จากหน้า OPAC

ในไฟล์ /srv/punsarn/koha/opac/opac-suggestions.pl (บรรทัดที่ 196-198) มีการใช้ฟังก์ชัน Encode::encode("utf8", ...) กับข้อมูลฟิลด์ต่างๆ เช่น ชื่อเรื่อง (Title), สำนักพิมพ์ (Publisher) และบันทึก (Notes):

# โค้ดเดิมที่มีปัญหา
$suggestion->{$suggest} = Encode::encode( "utf8", $scrubber->scrub( $suggestion->{$suggest} ) );

เนื่องจากระบบ Koha ได้ถูกกำหนดค่าให้รองรับ UTF-8 อยู่แล้ว (ผ่าน use CGI qw( -utf8 ); และการตั้งค่าฐานข้อมูล) การสั่ง encode ซ้ำในขั้นตอนนี้ทำให้ตัวอักษรภาษาไทยถูกแปลงเป็น "Bytes" (UTF-8 bytes) แทนที่จะเป็น Unicode string

เมื่อฟังก์ชัน Koha::Suggestion->store() ถูกเรียกใช้งาน ระบบจะทำการส่งอีเมลแจ้งเตือน NEW_SUGGESTION ทันที โดยนำชุดข้อมูลที่เป็น Bytes นี้ไปใส่ใน Template ของอีเมล ส่งผลให้ข้อความในอีเมลแสดงผลเป็น "ภาษาต่างดาว" (Double Encoding)

1 Answers

Solution / Workaround

ทำการแก้ไขไฟล์ /srv/punsarn/koha/opac/opac-suggestions.pl โดยนำการ Encode::encode ที่ซ้ำซ้อนออก เพื่อให้ข้อมูลที่ถูกส่งไปยังระบบเป็น Unicode string ที่ถูกต้องตั้งแต่เริ่มต้น

Code Change:

         my $scrubber = C4::Scrubber->new();
         foreach my $suggest ( keys %$suggestion ) {
-
-            # Don't know why the encode is needed for Perl v5.10 here
-            $suggestion->{$suggest} = Encode::encode( "utf8",
-                $scrubber->scrub( $suggestion->{$suggest} ) );
+            $suggestion->{$suggest} = $scrubber->scrub( $suggestion->{$suggest} );
         }

Verification Steps

  1. ล็อกอินเข้าใช้งานหน้า OPAC
  2. ทำการแนะนำหนังสือใหม่ (Purchase Suggestion) โดยระบุข้อมูลเป็นภาษาไทยในฟิลด์ Title และ Notes
  3. ตรวจสอบอีเมลแจ้งเตือนที่ระบบส่งออก (หรือตรวจสอบในตาราง message_queue)
  4. ข้อความภาษาไทยในอีเมลต้องแสดงผลถูกต้อง ไม่เป็นภาษาต่างดาว