UTF-8 ใช้พื้นที่ 3 ไบต์ ในการเก็บข้อมูลภาษาไทย 1 อักขระ  ดังนั้นจึงไม่สามารถใช้ฟังก์ชัน เช่น strlen() และ substr() กับภาษาไทยที่เป็น UTF-8 ได้ เช่น

$string = "ที่นี่abcd1234";
echo 'strlen() return: '.strlen($string);
ผลลัพธ์ที่ได้คือ
strlen() return: 26

ตัวเลข 26 มาจาก ภาษาไทย 6×3 = 18, ภาษาอังกฤษ 4 และตัวเลข 4 ตัว

ดังนั้นเพื่อให้นับจำนวนตัวอักขระได้อย่างถูกต้องจะต้องใช้ฟังก์ชัน multibyte  string  เช่น จากตัวอย่างข้างต้น จะต้องใช้ฟังก์ชัน mb_strlen() แทน strlen()

$string = "ที่นี่abcd1234";
echo 'mb_strlen() return: '.mb_strlen($string, 'utf-8');
ผลลัพธ์ที่ได้คือ:
strlen() return: 14

จะเห็นว่าได้ผลลัพธ์ตามที่ควรจะเป็นคือ ภาษาไทย 6, ภาษาอังกฤษ 4 และ ตัวเลข 4 ตัว

ในทำนองเดียวกัน เมื่อต้องการตัดประโยคให้สั้นลง เช่น ต้องการเลือกมาเพียง 3 ตัวอักษรแรก  เราจะไม่สามารถใช้ substr() กับภาษาไทยที่ encode ด้วย UTF-8 ได้

$new_string = substr($string, 0, 3);
echo $new_string;
ผลลัพท์ที่ได้คือ:
ท

เพื่อให้ได้ผลลัพธ์ถูกต้องตามที่ต้องการ เราจึงต้องใช้ mb_substr() แทน substr()

$new_string = mb_substr($string, 0, 3,'utf-8');
echo $new_string;
ผลลัพท์ที่ได้คือ:
ที่

จากตัวอย่างข้างต้น จะเห็นว่าจะต้องระบุพารามิเตอร์ตัวที่ 4 คือ encoding เป็น UTF-8 เข้าไปด้วย  เพื่อป้องกันไม่ให้เกิดความผิดพลาดในการใช้งาน เราจึงควรใช้ฟังก์ชัน mb_internal_enconde() กำหนดให้การ encode เป็น UTF-8 ในบรรทัดแรกๆ ของโปรแกรมเลย เช่น

echo mb_internal_encoding();
mb_internal_encoding('utf-8');
echo "<br />";
echo mb_internal_encoding();
ผลลัพธ์ทีได้คือ
ISO-8859-1
UTF-8

นอกจากนี้ เราสามารถใช้ฟังก์ชัน iconv_substr() ในการตัดคำด้วยเช่นกัน

$new_string = iconv_substr($string, 0, 3,'utf-8');
echo $new_string;
ผลลัพท์ที่ได้คือ:
ที่

:)  

Popularity: 8% [?]

Tagged with:
 

7 Responses to จัดการภาษาไทย (UTF-8) ด้วย Multibyte String Functions

  1. cnim16 says:

    ตอนนี้ปัญหาภาษาไทยในเว็บไม่มีปัญหาแล้วครับ
    สามารถใช้ utf-8 ได้สมบูรณ์

    แต่ที่มีปัญหาจะเป็นการรับ และ ส่งออกกับ Excel
    พอมีหนทางแก้ไขบ้างไหมครับ

  2. W.p. says:

    ใช้ CSV file มาช่วยสิครับ :wink:

  3. pui says:

    :razz: :razz:
    ขอบคุณนะคะ มีประโยชน์มากๆเลย

  4. itboy says:

    บทความนี้มีประโยชน์ครับ
    ขอบคุณครับ

  5. thunapi says:

    เราอ่านบทความนาย สองครั้ง ใช่ครังสอง เจ๋งมาก มันจะมีปัญหาเรื่องการตัดคำครับ เช่น ตัด ให้ ภาษาไทยกับ อังกฤษ ถ้าอยากเห็นชัด คือการเว้น บรรทัด อังกฤษ ประมาณเต็มบรรทัด ภาษาไทย จะ ครึงบรรทัด

  6. tewwaruk says:

    ขอบคุณ เป็นอย่างสูง ผมขอเอาไปใช้แก้ปัญหานะครับ

  7. Eddy says:

    บทความนี้เยี่ยมเลย ครับ ผมกำลังงมอยู่เลยว่าจะตัดข้อความมาไว้ที่ meta description แต่ตัดมาแล้วเจอ code ที่ผิดๆมาตรงตอนท้ายของข้อความที่ตัดมา ตอนนี้หมดปัญหาเลยอ่า… ขอบคุณนะครับ

Leave a Reply

Your email address will not be published. Required fields are marked *

*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Set your Twitter account name in your settings to use the TwitterBar Section.