สมมุติว่าเราจะใช้ Charset เป็น tis-620 ( เป็น Charset ของภาษาไทยครับ ย่อมาจาก Thai Industrial Standard 620-2533 ซึ่งเป็น ASCII ถ้าจะให้สากลก็ใช้ uft_8 ซึ่งเป็น Unicode แต่ว่าถ้าเป็นงานภาษาไทยผมก็ใช้ tis แล้วแต่ชอบครับ )

_ci ข้างหลังหมายถึง ( เช่น utf_8_unicode_ci ) Case Insensitive นะครับ ก็คือว่ามันจะมอง A กับ a เหมือนกัน มีประโยชน์ตอนที่จะ select ข้อมูลขึ้นมาครับ ในกรณีที่เราไม่สนว่าจะเป็นพิมพ์เล็ก พิมพ์ใหญ่ ถ้ามี _bin ต่อท้ายหมายถึง Binary อันนี้มันก็จะมอง A กับ a ไม่เหมือนกันแล้วครับ )

ทางฝั่ง Server ถ้าจะใช้ NAMES ก็ได้เหมือนกันครับ มันหมายถึงทั้งหมด ( มั้งนะไม่ค่อยชัวแต่น่าจะใช่ )
ถ้าจะให้ดีก็ ส่ง query นี้ก่อนทุกครั้งที่จะมีการ INSERT, UPDATE, SELECT นะครับ

<?php
   mysql_query( "SET NAMES tis620" );
?>

แต่ว่าสำหรับบางที่ Host เค้าไม่อนุญาติให้เรากำหนด Charset เองครับ ดังนั้นเราควรที่จะให้มันแสดง Error ด้วยจะได้รู้ ว่ามัน Set ค่าแล้วหรือยัง โดยใช้อันนี้แทนครับ

<?php
   mysql_query( "SET NAMES tis620" ) or die( "Query ล้มเหลวเพราะ : ". mysql_error() );
?>

ถ้ามัน SET NAMES ไม่ได้มันจะหยุดทำงานแล้วแสดง Error

สำหรับคำสั่ง die() คือจะสั่งให้ php หยุดทำงานทันที จะใช้ลอยๆก็ได้ถ้าอยากให้ php หยุดทำงาน ( ใช้เวลา DEBUG ) หรือเวลาตรวจสอบ สถานะการเข้าถึง ( ตรวจสอบ SESSION )

เช่นตัวอย่างการใช้ die() ในกรณีอื่นๆ

<?php
   $error = "ข้อความอะไรก็ได้ ที่อยากจะให้แสดงสำหรับ error นั้นๆ";
   die( $error );
?>
 
หรือในกรณีตรวจสอบสถานะการ Login
<?php
   if( !session_is_registered( "login" ) )
      die( "กรุณาทำการ Login ก่อนครับ !!!" );
 
   //จะไม่ทำงานโค้ดใน statement ถัดไป
   .......
   ......
   ...
?>

ถ้า Host ไม่อนุญาติให้เราใช้ SET NAMES จะมีวิธีแก้คือ เข้าไปดูว่าที่ Host เค้าใช้ Charset อะไร ใน phpmyadmin ตรงตารางที่เราสร้าง ในช่อง Collation
แล้วให้ใช้ iconv ในการแปลงข้อมูลแทนครับใช้ได้เฉพาะ Host ที่ที่มี PHP 4 >= 4.0.5, PHP 5

ใช้ iconv สำหรับแปลงไปเป็น Charset ที่เราต้องการเช่น ถ้าเราไปดูแล้วมันเป็น latin_swedish เราก็ต้องใส่ว่า แปลงจาก latin1 ไปเป็น tis-620

ปัญหามันจะอยู่ที่ว่าชื่อของ collation ที่มันแสดงกับที่เราจะเอามาใส่ใน iconv ไม่เหมือนกันนี่แหละ ต้องลองไป search google หาดูว่า ถ้าเป็น charset ชื่อนี้ต้องใช้ว่าอะไร

รูปแบบการใช้งาน iconv
iconv ( $in_charset, $out_charset, $str )
$in_cahrset : charset ที่มันเป็นอยู่
$out_charset : charset ที่เราต้องการจะแปลงให้เป็น
$str : ข้อความที่เราต้องการจะแปลง

<?php
   $result = "Old thai text : ". $thaitext. " New thai text : ";
   $result .= iconv( "latin1", "tis-620", $thaitext );
   echo $result;
?>

อันนี้น่าจะใช้ได้นะครับ

เพิ่มบรรทัดนี้ลงไปใน HTML ข้างใน Tag head ด้วยครับ เพื่อการเลือกแสดงผลที่ถูกต้อง ตรง charset เปลี่ยนตามที่เราจะใช้นะครับ

<head>
   <meta http-equiv="Content-Type" content="text/html; charset=tis-620" />
</head>

ปล.

nattster:
จริงๆ ขึ้นอยู่กับข้อมูลที่เก็บเข้าไปใน mysql ตอนแรกด้วยนะครับ

ถูกต้องเลยครับ ดังนั้นแล้วต้องล้างตารางแล้วใส่ข้อมูลเข้าไปใหม่ด้วนนะครับ ถ้าจะให้ชัวร์ก็ต้อง เขียน query แล้ว insert เข้าไปเองไม่ใช้ phpmyadmin ของ Host ( อย่าลืม setname ก่อนส่ง query ทุกครั้งเพื่อความชัวร์ ใช้ loop วนเอาครับ ทำเองไม่ยากหรอก )

อ่านดีๆก่อนใช้ Host ด้วยนะครับ บางที่เค้าจะห้ามใช้ภาษาที่ไม่ใช้ภาษาอังกฤษด้วยนะครับ ต้องดูตรงเงื่อนไข ดังนั้นถ้าเค้าจะไม่รองรับ ภาษาไทยก็ต้องทำใจครับ

อ่านเกี่ยวกับ UTF-8, TIS620, iconv เพิ่มเติมได้ที่

http://en.wikipedia.org/wiki/Utf8
http://en.wikipedia.org/wiki/TIS620
http://th.php.net/manual/en/function.iconv.php

Reply

คำนวณผลบวกด้านบนแล้วกรอกผลลัพธ์ลงในช่อง เช่น 2 ลบ 1 ให้พิมพ์ 1