วิธีแก้ปัญหา การตัดข้อความด้วย substr แล้วเป็น สี่เหลี่ยม
ปกติ ถ้าเข้าใช้ ภาษาไทยปกติก็จะไม่เจอปัญหานี้ แต่ถ้าเป็นเว็บ หรือ ฐานข้อมูลที่ใช้ UTF-8
เวลาตัดข้อความด้วย substr ก็จะเจอปัญหา ตัวสุดท้ายกลายเป็นสี่เหลี่ยม ทางแก้คือต้องใช้ function ที่ทำงานกับข้อความ ที่เป็น multi-byte
เช่น
mb_substr(); http://www.mindphp.com/modules.php?name=PHP_Manual&page=function.mb-substr.html
หรือ
iconv_substr() http://www.mindphp.com/modules.php?name=PHP_Manual&page=function.iconv-substr.html
ตัวอย่างเช่น
echo substr($msg,0,124);
แทนด้วย
echo mb_substr($msg,0,124,’UTF-8′);
หรือ
echo iconv_substr($msg, 0,124, “UTF-8”);
ปกติภาษาอังกฤษจะเป็น 1 อักษรต่อ 1ไบต์
ภาษาไทยจะเป็น 1 ตัวอักษร ต่อ 1-3 ไบต์ เวลาตัดคำ มันเลยเป็นอย่างนั้น เช่น
“การพัฒนาโปรแกรมโดยผู้ใช้”
บังเอิญว่ามันไปตัดโดนตรงคำว่า “ผู้” ซึ่งมีขนาด 3 ไบต์ พอตัดออกปรับ มันก็ไม่รู้ว่า ตัวอักษรนี้คืออะไร ก็เลยใส่เป็นยูนิโค๊ดไว้แทน
ทางแก้
หาฟังก์ชั่นการตัดคำให้เจอ แล้วแก้มันด้วย mb_substr(); แทน substr();
รูปแบบการใช้
ตัวอย่าง
<?php $short_title = substr(the_title('','',FALSE),0,40);
ลองแก้เป็น
<?php $short_title = mb_substr(the_title('','',FALSE),0,40,'UTF-8');
ของ gazpo_slider.php
ถ้าตรง Recent Popular Comments ให้แก้ที่
posts_tabs.php
หรือ
ทุกที่ที่มี
substr(the_title('','',FALSE),0,40);
แก้เป็น
mb_substr(the_title('','',FALSE),0,40,'UTF-8');