เล็กๆน้อยๆกับ UTF-8
Wednesday, November 5th, 2008ก็บังเอิญมารื้อเว็บรถยนต์มือสองของตัวเองใหม่ แล้วทำให้เป็น UTF-8 ทั้งหมดจากเดิมใช้เป็น Tis-620 ผมว่าหลายๆเว็บอาจจะเคยมีปัญหากับเรื่องของการตัดคำด้วยการใช้ UTF-8 แน่นอน เพราะตอนที่ใช้พวก Tis-620 มันไม่มีปัญหาครับ แต่มันจะมีปัญหากับ UTF-8
ตัวอย่างการตัดคำที่ผิดพลาดครับ

ลองดูที่มีตัวสี่เหลี่ยมนั่นแหล่ะครับที่เกิดจากการตัดคำบน UTF-8 แล้วมีปัญหา
ลองมาทดสอบกันง่ายๆกับโค๊ดนี้
<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”>
<html xmlns=”http://www.w3.org/1999/xhtml”>
<head>
<meta http-equiv=”Content-Type” content=”text/html; charset=utf-8″ />
<title>Untitled Document</title>
</head>
<body>
<?php
$text = “สวัสดีครับพ่อแม่พี่น้อง”;
$newtext = substr($text, 0,10);
echo $newtext ;
?>
</body>
</html>
เมื่อลองทดสอบกับไฟล์ตัวนี้จะได้ผลออกมาเป็น
สวั�
แบบนี้ก็ไม่ถูกต้องแน่นอน
แต่ก็สามารถแก้ไขได้ง่ายๆ ลองดูโค๊ดนี้เทียบกันครับ
<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”>
<html xmlns=”http://www.w3.org/1999/xhtml”>
<head>
<meta http-equiv=”Content-Type” content=”text/html; charset=utf-8″ />
<title>Untitled Document</title>
</head>
<body>
<?php
$text = “สวัสดีครับพ่อแม่พี่น้อง”;
$newtext = iconv_substr($text, 0,10, “UTF-8″);
echo $newtext ;
?>
</body>
</html>
ผลออกมาก็จะถูกต้องครับ ก็แสดงผล สวัสดีครับ ขึ้นมาครับ
ความต่างของมันคือคำสั่งที่เรียกมาตัดคำครับ จาก substr เปลี่ยนมาใช้ iconv_substr หรือจะไปใช้อีกแบบก็คือ
<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”>
<html xmlns=”http://www.w3.org/1999/xhtml”>
<head>
<meta http-equiv=”Content-Type” content=”text/html; charset=utf-8″ />
<title>Untitled Document</title>
</head>
<body>
<?php
$text = “สวัสดีครับพ่อแม่พี่น้อง”;
mb_internal_encoding(”utf8″);
$newtext = mb_substr($text, 0, 10);
echo $newtext ;
?>
</body>
</html>
ก็ไม่มีใครว่าเหมือนกันครับ ทั้ง 2 แบบก็ไม่ต่างกันครับ ก็เพียงแค่เรียกโมดูลการทำงานคนละตัวกัน
iconv_substr เป็นการใช้ library iconv ของ OS
ส่วนอีกอันหนึ่งนั้น เป็น built in function ของ php นั่นเอง (multibyte string)
ก็เลือกใช้กันไป…. ลองไปอ่านเพิ่มได้ที่ http://th.php.net/iconv_substr



















