ปัญหา Ajax Autocomplete กับภาษาไทย
ถาม-ตอบ แนะนำไอเดียว โค้ดตัวอย่าง แนวทาง วิธีแก้ปัญหา ปัญหา Ajax Autocomplete กับภาษาไทย
จากบทความนี้ครับ เวลาเราพิมพ์ลงไปมันก็แสดงผลได้ถูกต้องน่ะครับ แต่ถ้าเราไม่ได้พิมพ์
แล้วกดปุ่มลูกศรค้นหาเลยกลับแสดงผลเป็นภาษาต่างด้าวครับ งงเลย
ไม่ทราบว่าต้องแก้ยังไง ฐานข้อมูลลองเซตแบบ utf8 tis620 แล้วก็ยังไม่ได้อยู่ดี

คำแนะนำ และการใช้งาน
สมาชิก กรุณา ล็อกอินเข้าระบบ เพื่อตั้งคำถามใหม่ หรือ ตอบคำถาม สมาชิกใหม่ สมัครสมาชิกได้ที่ สมัครสมาชิก
- ถาม-ตอบ กรุณา ล็อกอินเข้าระบบ
ในไฟล์ php จากตัวอย่าง https://www.ninenik.com/สร้างฟังก์ชัน_autocomplete_ให้ใช้งานแบบง่าย_ด้วย_ajax-209.html ใช้ชื่อ gdata.php
ให้ลองใส่ header ไว้ด้านบน ตามตัวอย่างข้างล่างดู อาจจะแก้ปัญหาได้
1 2 3 4 | <?php header( "Content-type:text/html; charset=tis-620" ); // php code // ?> |
ใช้เป็น tis-620 ถ้าไม่ได้ลองเปลี่ยนเป็น UTF-8
1 2 3 4 | <?php header( "Content-type:text/html; charset=UTF-8" ); // php code // ?> |

ขอบคุณครับ ได้แล้วครับ ต้องใช้คำสั่ง iconv ครับ
ผมแทรก
<?
header("Content-type:text/html; charset=UTF-8");
$link=mysql_connect("localhost","root","root") or die("error".mysql_error());
mysql_query("set character set tis620");// ผมต้องเซตเป็น tis620 จากเดิมเซตเป็น UTF8 งง
mysql_select_db("db_expert",$link);
ตอนเอ้าท์พุท ต้องแปลงกลับจาก tis620->utf8
$name_th = iconv('TIS-620', 'UTF-8', $name_th);
$id = iconv('TIS-620', 'UTF-8', $id);

แต่ตอนนี้ติดปัญพิมพ์คำแล้วไม่แสดงคำค้นหาเลย
จากเดิมมันแสดงแล้ว เหอะๆ

ถามอีกนิดครับ ถ้าผมไม่ใช้ คำสั่ง locate ในการค้นหา แต่ใช้ like แทน จะทำให้เกิดผลเสียหรือเปล่าครับ
หรือจะทำให้ระบบช้าลงหรือเปล่าครับ

ได้แล้วครับ น่าจะเกิดจาก คำสั่ง locate ครับ ผมเลยใช้ like แทนเลยครับ
<?php
// เชื่อมต่อฐานข้อมูล
$link=mysql_connect("localhost","root","root") or die("error".mysql_error());
mysql_query("set character set tis620");
mysql_select_db("db_expert",$link);
$q=(isset($_POST["q"])) ? $_POST["q"] : $_GET["q"];
$q = iconv('UTF-8','TIS-620',$q); //แปลงจาก UTF8 เป็น TIS620
$pagesize = 10; // จำนวนรายการที่ต้องการแสดง
$table_db="db_name"; // ตารางที่ต้องการค้นหา
$find_field="name_th"; // ฟิลที่ต้องการค้นหา
$sql = "select * from $table_db where name_th like'%$q%' LIMIT 10";
$results = mysql_query($sql) or die("<H3>ขออภัย ไม่สามารถติดต่อฐานข้อมูลได้ในขณะนี้</H3>");
while ($row = mysql_fetch_array( $results )) {
$id = $row["PersNo"]; // ฟิลที่ต้องการส่งค่ากลับ
$name_th=$row["name_th"]; // ฟิลที่ต้องการส่งค่ากลับ
$depart=$row["depart_th"];
$name = ucwords( strtolower( $row["name_th"] ) ); // ฟิลที่ต้องการแสดงค่า
//$name2 = ucwords( strtolower( $row["PersNo"] ) ); // ฟิลที่ต้องการแสดงค่า
$name = str_replace("'", "'", $name); // ป้องกันเครื่องหมาย '
//$name2 = str_replace("'", "'", $name2); // ป้องกันเครื่องหมาย '
$display_name = preg_replace("/(" . $q . ")/i", "<b>$1</b>", $name);
$display_name2 = preg_replace("/(" . $q . ")/i", "<b>$1</b>", $depart);
$display_name = iconv('TIS-620', 'UTF-8', $display_name);
//$display_name2 = iconv('TIS-620', 'UTF-8', $display_name2);
$name_th = iconv('TIS-620', 'UTF-8', $name_th);
$id = iconv('TIS-620', 'UTF-8', $id);
$depart = iconv('TIS-620', 'UTF-8', $depart);
echo "<li onselect="this.setText('$name_th').setValue('$id');">$display_name | $depart</li>";
}
mysql_close();
?>
