คลิกที่นี่ -->> เปรียบเทียบทำเลและราคาที่ดินวังน้ำเขียวผ่าน GooleMAP | คลิกที่นี้ -->> Upload ภาพหัวข้อ: จัดการภาษาไทย (UTF-8) ด้วย Multibyte String Functions เริ่มหัวข้อโดย: LesCop ที่ 16 พฤศจิกายน 2557 09:18:18 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; ผลลัพท์ที่ได้คือ: ที่
คลิกที่นี่ -->> จัดพระของขวัญเข้ารุ่นและพิมพ์ |