สวัสดีครับ ผมมีสคริป php ตัวหนึ่งที่มีการตัดตอนข้อควาในประโยคให้สั้นลง เพื่อให้แสดงผลบนหน้าเว็บได้สวยงาม โดยใช้คำสั่ง
$new_text = substr($old_text, 0, 30); //ตัดคำออกมาเพียง 30 ตัวอักษร
ซึ่งมันไม่มีปัญหาอะไรหากใช้กับการเข้ารหัสแบบ tis-620 แต่ปรากฎว่าไม่สามารถใช้ได้อย่างถูกต้องกับ utf-8 เพราะตัวอักษรตัวสุดท้ายหลังข้อความจะกลายเป็นภาษาต่างดาว ซึ่งผมเข้าใจแบบงูๆ ปลาๆ ว่าการจัดเก็บตัวอักษรแบบ utf-8 นั้น มีการอ้างตำแหน่งต่างไปจาก tis-620 หรือ ANSI แบบเดิม
ไม่ทราบว่าปัญหานี้เราจะแก้ไขได้อย่างไรครับ
รบกวนด้วยครับ
icez
2
เปลี่ยนคำว่า 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)
ขอบคุณมากเลยครับกำลังต้องการเลยครับผม

มันต่างกันยังไงกับอันนี้ล่ะครับ
$new_text = iconv_substr($old_text, 0, 30, “UTF-8”);
icez
8
ไม่ต่างครับ แค่เรียกใช้ module กันคนละตัว
อันแรกใช้ library iconv ของ OS
อีกอัน เป็น built in function ของ php เอง (multibyte string)
มีวิธีการเรียลำดับภาษาไทยด้วยไหมครับ
ของผมยังเรียงผิดอยู่เลย
ของ tis-620 มันเรียงถูกต้องแป๊ะ
UTF-8
icez
10
เวลาเลือก collation ต้องเลือกเป็นไอนี้นะครับ

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

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