|
แสดงผลภาษาไทย PHP กับ MySQL ด้วยฟังก์ชั่นของ mysqli (UTF8) |
แสดงผลภาษาไทย PHP กับ MySQL ด้วยฟังก์ชั่นของ mysqli (UTF8) ช่วงหลัง ๆ เห็นสมาชิกเริ่มหันมาใช้ function ของ mysqli กันมากขึ้น ซึ่งก็ยังมีหลาย ๆ คนที่ใช้รูปแบบการเขียนภาษาไทยแบบผิด ๆ อยู่ ซึ่งปัญหาที่ตามมาคือ แสดงผลภาษาไทยได้ถูกต้องบ้าง ไม่ถูกต้องบ้าง และเมื่อจัดเก็บลงบน MySQL แล้ว บน phpMyAdmin กลับอ่านไม่ออก ไม่สามารถ Export นำไปใช้งานที่อื่นได้ ซึ่งจะเป็นปัญหาที่สะสมรอปัญหาใหญ่ที่จะเกิดขึ้นในอนาคตตามมาอย่างแน่นอน
แสดงผลภาษาไทย PHP กับ MySQL ด้วยฟังก์ชั่นของ mysqli (UTF8)
อย่างที่เราทราบกันอยู่แล้วว่าตั้งแต่ MySQL เวอร์ชั่น 4.x หรือ 5.x ขึ้นไปจะให้ความสำคัญกับ Collation ของ Charset มาก โดยตัว Collation นี่เองจะเป็นระบุชนิดของข้อมูล Charset ที่จะจัดเก็บ ซึ่งเป็นกระบวนการบน Database ของ MySQL ที่จะจัดการกับข้อมูลนั้น ๆ และสำหรับ Collation ที่ได้รับความนิยมมากที่สุดก็คือ utf8 เพราะมันสามารถรองรับการจัดเก็บได้หลากหลายภาษา ไม่จำกัดเฉพาะภาษาไทยเท่านั้น โดยข้อมูลจะถูกจัดเก็บในรูปแบบของ Character encoding คือ ทุก Character จะผ่านการแปลงก่อนการจัดเก็บ และ ค่อยแปลงกลับก่อนนำมาใช้ ฉะนั้นมันจะสามารถปัญหาเรื่องภาษาไทยและภาาาอื่น ๆ ได้อย่างแม่นยำไม่ผิดเพี้ยนแน่นอน
การสร้างตารางของ MySQL ให้ Colation เป็นแบบ UTF-8
CREATE TABLE IF NOT EXISTS `tb_register` (
`UID` int(11) NOT NULL auto_increment,
`NAME` varchar(150) NOT NULL,
`SURNAME` varchar(150) NOT NULL,
PRIMARY KEY (`UID`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
ในกรณีที่เขียนผ่าน Query สามารถเพิ่มคำสั่ง CHARSET=utf8 ในส่วนของการ Create Table
ในกรณีที่สร้างบย phpMyAdmin สามารถเลือกได้จาก Collation ซึ่งในภาพจะเห็นว่าจะมี utf8 หลายประเภทมาก ซึ่งทั้งหมดนี้รวมอยู่ใน utf8 เพียงแต่ มันแยกออกเป็นหลายตัว ซึ่งส่วนมากจะเป็นรูปแบบการจัดเรียงที่แตกต่างกันไป โดยปกติแล้วให้เลือกใช้แบบ general ได้เลย
- ci = case-insensitive จัดเรียงตามตัวอักษร มองตัวอักษรใหญ่ และเล็กมีความสำคัญเท่ากัน โดยปกติมักจะใช้ collation แบบ ci
- cs = case sensitive จัดเรียงโดยให้ความสำคัญกับอักษรตัวใหญ่ มากกว่าตัวเล็ก เช่น Z จะมาก่อน a
- bin = binary ในรูปแบบของ binaryใช้สำหรับการเปรียบเทียบ
หลังจากที่สร้างตารางบน MySQL ให้เป็นแบบ UTF8 แล้ว ขั้นตอนในการเขียน PHP ด้วยฟังก์ชั่นของ mysqli คือ
<meta http-equiv=Content-Type content="text/html; charset=utf-8">
กำหนด meta ของ charset=utf-8 เสมอ เพราะข้อมูลที่จะส่งไปยัง Server จะอยู่ในรูปแบบของ utf8 โดยที่ไม่ต้องไปแปลงให้เป็น utf8 ก่อนจัดเก็บ
<?php
$serverName = "localhost";
$userName = "root";
$userPassword = "root";
$dbName = "mydatabase";
$objCon = mysqli_connect($serverName,$userName,$userPassword,$dbName);
mysqli_set_charset($objCon, "utf8");
เพิ่ม mysqli_set_charset($objCon, "utf8"); ให้กับการเชื่อมต่อ ก็ถือว่าตอนนี้ข้อมูลทั้งหมดจะถูก รับ-ส่ง จัดเก็บในรูปแบบของ utf8 แล้ว
Example
<html>
<head>
<title>ThaiCreate.Com PHP/MySQL (Thai UTF8)</title>
<meta http-equiv=Content-Type content="text/html; charset=utf-8">
</head>
<body>
<?php
/*** Connect ***/
$serverName = "localhost";
$userName = "root";
$userPassword = "root";
$dbName = "mydatabase";
$objCon = mysqli_connect($serverName,$userName,$userPassword,$dbName);
mysqli_set_charset($objCon, "utf8");
/*** Add Record ***/
if($_GET["Action"]=="Save")
{
$strSQL = "INSERT INTO tb_register (NAME,SURNAME) VALUES ('".$_POST["txtName"]."','".$_POST["txtSurname"]."')";
$objQuery = mysqli_query($objCon,$strSQL);
}
/*** List Record ***/
$strSQL = "SELECT * FROM tb_register";
$objQuery = mysqli_query($objCon,$strSQL);
?>
<table width="498" border="1">
<tr>
<th width="87"> <div align="center">UID </div></th>
<th width="145"> <div align="center">NAME </div></th>
<th width="244"> <div align="center">SURNAME </div></th>
</tr>
<?php
while($objResult = mysqli_fetch_array($objQuery,MYSQLI_ASSOC))
{
?>
<tr>
<td><div align="center"><?php echo $objResult["UID"];?></div></td>
<td><?php echo $objResult["NAME"];?></td>
<td><?php echo $objResult["SURNAME"];?></td>
</tr>
<?php
}
?>
<form name="frmMain" method="post" action="?Action=Save">
<tr>
<td>
</td>
<td><input name="txtName" type="text" id="txtName"></td>
<td><input name="txtSurname" type="text" id="txtSurname">
<input name="btnSubmit" type="submit" id="btnSubmit" value="Submit"></td>
</tr>
</form>
</table>
<?php
mysqli_close($objCon);
?>
</body>
</html>
Output
พื้นฐาน PHP กับ MySQLi
สำหรับ mysql ใน function เดิม : ปัญหาภาษาไทย PHP กับ MySQL ??????????
.
|
|
|
|
|
|
|
|
By : |
TC Admin
|
|
Article : |
บทความเป็นการเขียนโดยสมาชิก หากมีปัญหาเรื่องลิขสิทธิ์ กรุณาแจ้งให้ทาง webmaster ทราบด้วยครับ |
|
Score Rating : |
|
|
Create Date : |
2015-06-10 |
|
Download : |
No files |
|
Sponsored Links |
|
|
|
|
|
|