ช่วงนี้ผมพัฒนาโครงการน้ำใสอยู่ครับ ซึ่งถูกเขียนขึ้นมาด้วยภาษา 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