ขอความรู้การตัดคำไทยสำหรับ utf-8 ด้วย PHP

สวัสดีครับ ผมมีสคริป php ตัวหนึ่งที่มีการตัดตอนข้อควาในประโยคให้สั้นลง เพื่อให้แสดงผลบนหน้าเว็บได้สวยงาม โดยใช้คำสั่ง

$new_text = substr($old_text, 0, 30); //ตัดคำออกมาเพียง 30 ตัวอักษร

ซึ่งมันไม่มีปัญหาอะไรหากใช้กับการเข้ารหัสแบบ tis-620 แต่ปรากฎว่าไม่สามารถใช้ได้อย่างถูกต้องกับ utf-8 เพราะตัวอักษรตัวสุดท้ายหลังข้อความจะกลายเป็นภาษาต่างดาว ซึ่งผมเข้าใจแบบงูๆ ปลาๆ ว่าการจัดเก็บตัวอักษรแบบ utf-8 นั้น มีการอ้างตำแหน่งต่างไปจาก tis-620 หรือ ANSI แบบเดิม

ไม่ทราบว่าปัญหานี้เราจะแก้ไขได้อย่างไรครับ
รบกวนด้วยครับ

เปลี่ยนคำว่า substr เป็น iconv_substr ครับ
แล้วเพิ่ม parameter อีกตัวว่า "UTF-8"
จะได้ประมาณนี้

$new_text = iconv_substr($old_text, 0, 30, “UTF-8”); //ตัดคำออกมาเพียง 30 ตัวอักษร

ref: http://th.php.net/iconv_substr

โอ้ว ขอบคุณมากๆ เลยครับ ใช้ได้แล้ว ความรู้ใหม่เลยนะเนี่ย

mb_internal_encoding(“utf8”);
mb_substr($str, 0, 30)

ขอบคุณมากเลยครับกำลังต้องการเลยครับผม

:slight_smile:

:smash:

มันต่างกันยังไงกับอันนี้ล่ะครับ

$new_text = iconv_substr($old_text, 0, 30, “UTF-8”);

ไม่ต่างครับ แค่เรียกใช้ module กันคนละตัว

อันแรกใช้ library iconv ของ OS
อีกอัน เป็น built in function ของ php เอง (multibyte string)

มีวิธีการเรียลำดับภาษาไทยด้วยไหมครับ
ของผมยังเรียงผิดอยู่เลย

ของ tis-620 มันเรียงถูกต้องแป๊ะ

UTF-8

เวลาเลือก collation ต้องเลือกเป็นไอนี้นะครับ

เวลาสั่งเรียงจะได้ประมาณนี้

(เรียงตาม subject มี 20000 กว่า record)