ช่วงนี้ผมพัฒนาโครงการน้ำใสอยู่ครับ ซึ่งถูกเขียนขึ้นมาด้วยภาษา PHP ซึ่งผมได้พอร์ตโค้ดบางส่วนมาจากโครงการภาษาไอริน จากเดิมที่เขียนด้วยภาษา Coffee เป็นภาษา PHP ซึ่งพบว่าหลังจากลองรันโค้ดดูผลลัพธ์กับไม่ถูกต้องดังที่ผมคาดหวังไว้ ผมจึงได้ลองใช้คำสั่ง strlen('ก'); เพื่อนับความยาวของตัวอักษรพบว่า ก กลับมีความยาวมากถึง 3 ทั้งที่ควรจะเป็น 1 ผมจึงพยายามค้นหา จนพบกับ library ชื่อว่า multibyte

Multibyte

Multibyte เป็น library สำหรับจัดการข้อความที่ 1 ตัวอักษรใช้มากกว่า 1 ไบท์ อย่าง UTF-8 เป็นต้น โดยส่วนใหญ่คล้ายกับคำสั่งเดิม แต่เติม mb_ ไปด้านหน้า โดยในที่นี่ผมจะยกตัวอย่างเฉพาะคำสั่งที่ใช้ในโครงการน้ำใสนะครับ เนื่องจากคำสั่งใน library นี้มีค่อนข้างมากเลยทีเดียว

mb_strlen

เป็นคำสั่งสำหรับนับความยาว หลังจากลองใช้คำสั่งนี้ก็พบกว่าตัวอักษร ก นับเป็น 1 ไม่ใช่ 3 อีกต่อไปแล้ว

mb_substr

เมื่อ multibyte มีความยาวมากกว่า 1 ไบท์นั่นนั้นจึงไม่สามารถเข้าถึงตัวอักษรผ่าน $var[$i] ได้อีก จึงเปลี่ยนมาใช้วิธี mb_substr($var,$i,1) แทน

mb_ereg_replace

แม้กระทั่งเขียนทับตัวอักษรก็ไม่สามารถใช้วิธีเดิมได้ จึงเปลี่ยนมาใช้ multibyte

mb_ereg_search_regs

แม้กระทั่งคำสั่ง preg_match ก็ทำงานไม่ถูกต้องจึงเปลี่ยนมาใช้อันนี้แทน แต่จะสังเกตว่าคำสั่งนี้ไม่ใช่แค่ เติม mb_ ไปข้างหน้าแล้วดังนั้นอ่านคู่มือการใช้กันให้ดีๆนะครับ

ทิ้งท้าย

หวังว่าจะเป็นประโยชน์สำหรับผู้ที่กำลังมีปัญหาเกี่ยวกับ PHP และภาษาไทยไม่มากก็น้อยนะครับ สามารถอ่านข้อมูลของ library นี้ทั้งหมดได้บน PHP.net

17 ตุลาคม 2559

คลังบทความ