บ้างคนที่เขียน PHP อาจเจอปัญหาที่ว่าโค้ดออกมาเป็น ??? เมื่อเรียกข้อมูลจาก MySQL หลังจากนั้นก็ได้ไปแก้ CHARSET ของ DB แล้วแต่ยังไม่หาย วันนี้เรามีคำตอบให้คุณ
สำหรับคนที่ยังไม่เคยลองแก้ Charset ลองแก้ดูก่อนนะคับ
http://www.citecclub.org/forum/-mysql--t2798.html
เมื่อสุดท้ายลองแก้ Charset แล้วยังไม่หายเรามีวิธ๊ให้คุณเลือก 2 วิธ๊คับ
1. กลับไปใช้ MySQL 4.0
เนื่องจากตอนผลใช้ 5.0 แล้วเกิดปัญหา แสดงผลภาษาไทยไม่ได้ แต่พอเปลี่ยนมาใช้ 4.0 ก็กลับมาใช้ได้ (งง)
2. ใช้ utf8
และแล้วก็เข้าสู่บทความหลักของกระทู้นี้ (ฮา)
วิธีนี้ผมคิิดได้จากตอนที่ผมกำลังเขียนโปรแกรมส่งอาจารย์ แต่ผมดันลง MySQL 5.0 แล้วก็ไม่มี MySQL4.0 พยายามแก้ Charset ก็แล้วยังไม่หายจริงๆ เลยใช้วิธีทีนี้ ปรากฏว่าใช้ได้ แต่อาจจะงงนิดหน่อยนะคับ
ก่อนอื่นขอทบทวน UTF-8 สำหรับผู้ที่ไม่เข้าใจนะคับ
UTF-8 (Unicode Transformation Format - 8 bit) คือการเข้ารหัส 8 บิทให้กับทุกตัวอักษรบนโลกนี้ พูดง่ายๆ ถ้าจะแสดงภาษาทุกภาษาบนโลกในหน้าจอเดียวกันก็ต้องทำการใช้ชุดตัวอักษร UTF-8 นี้แหละคับ
ใน PHP มีฟังก์ชันในการเข้ารหัส และ ถอดรหัส UTF-8 อยู่แล้ว (มาถึงตรงนี้หลายคนคงเข้าใจแนวคิดแล้วนะคับ)
วิธีที่ 2 นี้จะใช้การเข้ารหัสทุกภาษาบนโลกนี้เป็น UTF-8 หลังจากนั้นก็จะทำการแสดงผลกลับออกมาเป็น ภาษาเดิมคับ
โดยวิธีนี้ผมทดลองบนเครื่องผม โดยแก้ charset ของ MySQL เป็น utf8_unicode_ci (Engine: MyISAM)
ฟังก์ชันที่เกียวข้องกับวิธ๊นี้ มี utf8_encode() และ utf8_decode() คับ
วิธีใช้ก็ง่ายๆ จะเข้ารหัสก็ utf8_encode(ข้อความ) จะแปลงรหัสคืนก็ utf8_decode(ข้อความ) ง่ายใช่ไหมคับ
เมื่อเข้าใจฟังก์ชั่นก็เข้าสู่การประยุกต์ใช้งาน
เวลาที่เราเขียนโปรแกรม PHP จะทำการแทรกโค้ดภาษา SQL ลงไป (ตัวอย่างคือการรับค่าจาก textbox: Name/Method: Post)
$sql = "INSERT INTO tests (field1) VALUES ('" . utf8_encode($_POST['Name']) . "';";
และเวลาเราทำการนำข้อมูลออก
<?php echo utf8_decode($qrySearch['field1']); ?>
เท่านี้ก็สามารถใช้ภาษาไทยได้แล้วคับ
วิธีนี้อาจจะงงๆ หน่อย แต่ก็ขอให้เป็นอีกทางเลือกหนึ่งแล้วกันนะคับ (ฮา + งงๆ)


Reply With Quote
