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

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()

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

ภาษาไทยกับ PHP และ MySQL

UTF-8 เป็นคำตอบสุดท้่าย เพื่อให้การใช้ภาษาไทยกับ PHP และ MySQL ใช้งานได้อย่างสมบูรณ์

การสร้างฐานข้อมูลใน MySQL

ให้ตั้งค่าดังต่อไปนี้

  • Default CHARSET = utf8
  • COLLATE = utf8_unicode_ci

ตัวอย่างเช่น

CREATE TABLE brand (
pk_brand int(5) NOT NULL auto_increment,
brand varchar(250) collate utf8_unicode_ci NOT NULL,
brand_logo varchar(200) collate utf8_unicode_ci NOT NULL,
website varchar(200) collate utf8_unicode_ci default NULL,
PRIMARY KEY  (pk_brand)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

แล้วทำไมจึงไม่ใช้ utf8_general_ci?  อ่านได้ที่นี่

การเชื่อมต่อจาก PHP ไปยัง MySQL

หลังจากที่เชื่อมต่อกับฐานข้อมูลแล้วให้ส่ง query ต่อไปนี้ด้วย (ทำแค่ครั้งเดียว)

  • set NAMES utf8

ขอให้สังเกตว่า ใช้ utf8  ไม่ใช่  utf-8  ตัวอย่างเช่น

<?php
// Database connection for abstract
$dsn = 'mysql://username:password@localhost/database';
$mdb2 =& MDB2::factory($dsn);
if (PEAR::isError($mdb2)) {
    die ($mdb2->getMessage());
}
// set fetchmode
$mdb2->setFetchMode(MDB2_FETCHMODE_ASSOC);
$mdb2->query('set NAMES utf8');
?>

การเขียน META TAG ใน HTML Code

<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>hello!</title>
</head>

🙂