การแสดงผล เออเรอร์ Window-874 UTF-8 มันมีปัญหาใช้งานได้อย่างเสียอย่าง
พอดีผมเขียนเวบให้มันดึงดาต้าจาก MSSQL มาเก็บไว้ใน javascript ประมาณนี้
Code (PHP)
$(function() {
var projects = [
<?
$servername = 'xxxxxxxxxxxxxxx';
$databasename = 'xxxxxxxxxxx';
$user = 'sa';
$pass = 'xxxxxxxxxxx';
$connection_string = "DRIVER={SQL Server};SERVER=$servername;DATABASE=$databasename;AutoTranslate=no;";
$objConnect= odbc_connect($connection_string ,$user, $pass);
$strSQL = "SELECT [EMP_ID],[EN],[NAME_EN],[SURNAME_EN],[NAME_TH],[SURNAME_TH],[SECTION],[POSITION],[JOIN_DATE] FROM [train].[dbo].[EMP]";
$objExec = odbc_exec($objConnect,$strSQL) or die ("Error Execute [".$strSQL."]");
while($objResult = odbc_fetch_array($objExec))
{ ?>
{
value: "<?=$objResult['EMP_ID'];?>",
label: "<?=$objResult['EN'];?> <?=$objResult['NAME_EN'];?>",
desc: "<?=$objResult['NAME_TH'];?> <?=$objResult['SURNAME_TH'];?> <?=$objResult['SECTION'];?> <?=$objResult['POSITION'];?>",
icon: ""
},
<? } ?>
{
value: "---",
label: "---",
desc: "---",
icon: "jqueryui_32x32.png"
}
];
แล้วก็มีบางส่วยของหน้าเวบที่ใช้ jQuery Function เช่น
Code (JavaScript)
<script >
$(document).ready(function () {
//called when key is pressed in textbox
$("#SCORE").keypress(function (e) {
//if the letter is not digit then display error and don't type anything
if (e.which != 8 && e.which != 0 && (e.which < 48 || e.which > 57)) {
//display error message
$("#errscore").html("ตัวเลขเท่านั้น").show().fadeOut("slow");
return false;
}
});
});
</script>
กับอันนี้
Code (JavaScript)
<script >
$(function() {
$( document ).tooltip();
});
</script>
อันท้ายนี้มันแสดงผลที่ช่องTextboxทั่วไปที่มี Title
<input type="" id="DEFECT_REJECT" title="กรุณากรอกตัวเลขเท่านั้น">
ส่วนรูปแบบของทูลทิปนี้ก็มีแค่นี้
Code (PHP)
<style>
label {
display: inline-block;
width: 2em;
}
.ui-tooltip {
padding: 10px 20px;
color: red;
border-radius: 10px;
font: bold 14px "Ms trabuchet", Sans-Serif;
text-transform: uppercase;
box-shadow: 0 0 7px black;
}
</style>
ไม่แน่ใจว่าปัญหาจะเป็นตรงอันแรก คือค่าที่เอาไปเก็บในตัวแปลจาวาหรือปล่าว
ถ้าเราตั้งให้เวบแสดงผลเป็นUTF-8 ชื่อพนักงาน NAME_TH SURNAME_TH มันจะเป็นสี่เหลี่ยมข้าวหลามตัดหมดเลย ในทางกลับกันถ้าเปลี่ยนเป็น Window-874 ไอ้ส่วนภาษาไทย ที่เหลือ ใน ทูลทิป ใน errmsg ต่างๆมันก็เป็นแทน โดยที่ช่อง NAME_TH SURNAME_TH กลับมาแสดงผลถูกต้องปรกติTag : PHP, Ms SQL Server 2008, jQuery
Date :
2014-04-22 13:41:25
By :
anue0159
View :
4234
Reply :
16
ปัญหาคือพอ set เป็น utf-8 แล้วภาษาไทยที่ hard code ลงไปทำแสดงผลผิดว่างั้น
ดังนั้นใน page ตั้งเป็น utf-8 น่ะถูกแล้ว
ปัญหานี้น่าจะเกิดจากตัว editor ไม่ได้ encoding เป็น utf-8 ให้ไปที่ option ของ editor
แล้วมันให้มัน save file ด้วย utf-8 ก็น่าจะได้แล้ว
ปล. ถ้าไม่รู้จะไปตั้งต้องไหน ทำเอาไฟล์นี้มาเปิดด้วย notepad แล้ว save as เลือก encoding เป็น utf-8 ดูก่อนก็ได้
Date :
2014-04-22 14:13:38
By :
ห้ามตอบเกินวันละ 2 กระทู้
ตอบความคิดเห็นที่ : 1 เขียนโดย : ห้ามตอบเกินวันละ 2 กระทู้ เมื่อวันที่ 2014-04-22 14:13:38
รายละเอียดของการตอบ ::
Code (PHP)
$(function() {
var projects = [
<?
$servername = 'xxxxxxxxxxxxxxx';
$databasename = 'xxxxxxxxxxx';
$user = 'sa';
$pass = 'xxxxxxxxxxx';
$connection_string = "DRIVER={SQL Server};SERVER=$servername;DATABASE=$databasename;AutoTranslate=no;";
$objConnect= odbc_connect($connection_string ,$user, $pass);
$strSQL = "SELECT [EMP_ID],[EN],[NAME_EN],[SURNAME_EN],[NAME_TH],[SURNAME_TH],[SECTION],[POSITION],[JOIN_DATE] FROM [train].[dbo].[EMP]";
$objExec = odbc_exec($objConnect,$strSQL) or die ("Error Execute [".$strSQL."]");
while($objResult = odbc_fetch_array($objExec))
{ ?>
{
value: "<?=$objResult['EMP_ID'];?>",
label: "<?=$objResult['EN'];?> <?=$objResult['NAME_EN'];?>",
desc: "<?=$objResult['NAME_TH'];?> <?=$objResult['SURNAME_TH'];?> <?=$objResult['SECTION'];?> <?=$objResult['POSITION'];?>",
icon: ""
},
<? } ?>
{
value: "---",
label: "---",
desc: "---",
icon: "jqueryui_32x32.png"
}
];
ไม่น่าจะใช่อ่ะครับ ถ้าผมใช้ UTF-8 มันก็จะแสดงผลตรงนี้ไม่ถูกอย่างเดียวครับ ตรงอื่นจะถูกหมด มันอาจเป็นเพราะว่าผมเอาไปใส่ในตัวแปล จาวา หรือเปล่าเลยเป็นแบบนีั้
แบบที่คุณให้ลองก็ไม่ได้ครับ ลองแล้ว
Date :
2014-04-22 14:43:09
By :
anue0159
ลองเข้าหน้านั้นแล้ว view source ดูครับว่าใน JS ส่วนแรกที่คุณพูดถึงเป็นภาษาต่างดาวมั้ย ถ้าใช่ ก็ตั้งให้ fetch ค่าออกมาเป็น UTF-8 ก็จบ
Date :
2014-04-22 15:11:00
By :
itpcc
ตอบความคิดเห็นที่ : 4 เขียนโดย : itpcc เมื่อวันที่ 2014-04-22 15:11:00
รายละเอียดของการตอบ ::
ใช่ครับ ตรงที่บอกว่าดึงมาจาก MSSQL อยู่ใน JS (โค้ดส่วนแรกอ่ะครับ) มันเป็นที่เดียว
ไม่เข้าใจอ่ะครับ ให้ทำส่วนของ SQL script หรือครับ ผมลองเพิ่ม charset=UTF-8 ต่อท้ายconnectiong stringแล้วก็ยังไม่ได้
Code (PHP)
$connection_string = "DRIVER={SQL Server};SERVER=$servername;DATABASE=$databasename;AutoTranslate=no;charset=UTF-8"; //???????????? connection string ????? connect ODBC
$objConnect= odbc_connect($connection_string ,$user, $pass);//odbc_exec($objConnect, "SET NAMES 'UTF8'");
odbc_exec($objConnect, "SET client_encoding=UTF-8");
$strSQL = "SELECT [EMP_ID],[EN],[NAME_EN],[SURNAME_EN],[NAME_TH],[SURNAME_TH],[SECTION],[POSITION],[JOIN_DATE] FROM [train].[dbo].[EMP]";
$objExec = odbc_exec($objConnect,$strSQL) or die ("Error Execute [".$strSQL."]");
ประวัติการแก้ไข 2014-04-22 15:58:18
Date :
2014-04-22 15:56:37
By :
anue0159
วิวซอร์ส ได้แบบนี้
ประวัติการแก้ไข 2014-04-22 16:34:49
Date :
2014-04-22 16:30:08
By :
anue0159
จริงๆ ถ้าใน MSSQL Server เราตั้งเป็น Thai_CI_AS หรือ Thai_CI_AI เท่ากับว่ามันคือ Charset TIS-620 หรือ WIndows 874 ดังนั้นถ้าหน้าเว็บเราใช้ charset="UTF-8" ตอนเพิ่มหรือ แก้ไขข้อมูล ใน MSSQL Server จะเป็น ?????? ครับ ทางที่ดีคือ เราควรจะแปลงทั้ง ตอนเอาเข้า และ ตอนแสดงผล
ตอนเอาเข้า
Code (PHP)
$txt = iconv("utf-8","tis-620","ทดสอบ");
insert into tb_name (f1) values ('$txt')
ตอนแสดงผล
Code (PHP)
$txt = iconv("tis-620","utf-8",$fetch['f1']);
ประวัติการแก้ไข 2014-04-23 08:56:57
Date :
2014-04-23 08:56:06
By :
Manussawin
เอ๋....
เดี๋ยวผมลองก่อนๆ ขอบคุณมากครับ ทุกคน
Date :
2014-04-23 09:25:40
By :
anue0159
ผมติดตรง insert ตอนนี้ครับ ส่วนฐานข้อมูลใช้ charset window-874 ได้ใช้ iconv แปลงแล้วก็ยังไม่ได้ ติดตรง insert ข้อมูลอย่างเดียวตอนนี้ครับ พอมีทางแก้ไขไหมครับ
ประวัติการแก้ไข 2020-08-25 08:51:31
Date :
2020-08-25 08:41:33
By :
elliasjb
ถ้าข้อมูลยังไม่เยอะ แนะนำให้ convert ตระกูล text ให้ป็น NText Nvarchar ใช้งาน ในรูปแบบ utf-8
แบบไม่ต้องสนใจ charset ของ MSSQL (ข้อเสียมันใช้พื้นที่มากกว่า)
เวลา เอาเข้า database Set fieldname = N'ทดสอบภาษาไทย'
เวลาดึงข้อมูลปกติ
ไม่ใช่ไม่อยากใช้ ของไทยทำ แต่เมื่อมัน ยังไม่ดีพอ ก็ควรเลือกใช้สิ่งที่ดีกว่า
Date :
2020-08-25 09:13:59
By :
Chaidhanan
Load balance : Server 03