• June 8, 2017

    วิธีแก้ปัญหา การตัดข้อความด้วย 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');


เวอไนน์ไอคอร์ส

ประหยัดเวลากว่า 100 เท่า!






เวอไนน์เว็บไซต์⚡️
สร้างเว็บไซต์ ดูแลเว็บไซต์

Categories