ตัดบางส่วนจากข้อความภาษาไทยด้วย PHP Multibyte String
หน้าแรก PHP MySQL เกร็ดความรู้ ตัดบางส่วนจากข้อความภาษาไทยด้วย PHP Multibyte String
โปรแกรมประเภทเว็บบอร์ดหรือเว็บ Social ที่ต้องการตัดบางส่วนจากข้อความหรือบทความที่ยาว เพื่อเป็นตัวอย่าง แสดงในหน้าแรก หรือการ Share หัวข้อบทความเป็นตัวอย่าง จากเว็บไซต์อื่นๆ
หากเป็นภาษาอังกฤษ สามารถทำได้อย่างง่าย แต่ปัญหาคือเวลาตัดคำภาษาไทย มักจะไม่ได้ตามที่ต้องการ และอาจมีอักษรประหลาดแสดงขึ้นมาด้วย
ในบทความนี้จะแสดงการใช้ฟังก์ชั่น PHP Multibyte String เพื่อตัดบางส่วนของข้อความได้ตามต้องการได้
หมายเหตุ เครื่องที่ใช้ทดสอบ ตั้งค่าภาษาในรูปแบบ UTF-8
$ echo $LANG
en_US.UTF-8
ถ้าเป็นภาษาอังกฤษ สามารถเขียนโปรแกรม PHP โดยใช้ฟังก์ชั่น substr เช่นต้องการข้อความโดยตัดตั้งแต่อักษรตัวแรก (0) ยาวไปจำนวน 7 ตัว
<?php
$en_msg = 'This is an example';
print substr($en_msg, 0, 7) . "n";
?>
รันโปรแกรม ก็จะได้ข้อความตามที่ต้องการ
$ php test-substr.php
This is
แต่ถ้าเป็นข้อความภาษาไทย ข้อความที่ตัดได้จะไม่ใช่ เช่น ต้องการตั้งแต่อักษรตัวแรก (0) ยาวไปจำนวน 15 ตัวอักษร<
<?php
$th_msg = 'ตัวอย่างข้อความภาษาไทยที่ใช้ทดสอบ';
print substr($th_msg, 0, 15) . "n";
?>
ทดลองรันจะได้ตามตัวอย่าง
$ php test-substr.php
ตัวอย
เนื่องมาจากฟังก์ชั่น substr ไม่สามารถจัดการตัวอักษร UTF-8 ได้อย่างถูกต้อง จำเป็นต้องเปลี่ยนไปใช้ฟังก์ชั่น Multibyte String
substr (mb_substr)
รูปแบบการใช้ฟังก์ชั่น mb_substr จะเหมือนกับ substr เพียงแต่ต้องระบุรูปแบบของภาษาด้วย<
<?php
$th_msg = 'ตัวอย่างข้อความภาษาไทยที่ใช้ทดสอบ';
print mb_substr($th_msg, 0, 15, 'UTF-8');
?>
ทดลองรันโปรแกรม
$ php test-substr.php
PHP Fatal error: Call to undefined function mb_substr() in /home/user1/mbstring/test-substr.php on line 3
หากขึ้น error แบบนี้ แสดงว่าไม่ได้ติดตั้งโมดูล Multibyte String ใน PHP
ต้องคอมไพล์ PHP ใหม่ หรือติดตั้งไฟล์ rpm ชื่อ php-mbstring เพิ่มเติม
สามารถรัน php ตามด้วยออปชั่น -m เพื่อดูว่ามีโมดูล mbstring แล้วหรือไม่
หากติดตั้งเพิ่มเติมเรียบร้อยแล้ว
$ php -m | grep mbstring
mbstring
ทดลองรันอีกครั้ง ก็จะขึ้นจำนวนตัวอักษรถูกต้อง
$ php test-substr.php
ตัวอย่างข้อความ
ขอบคุณ: http://spalinux.com/2011/11/get-part-from-thai-sentence-using-php-multibyte-string
ขึ้นไปด้านบน
