1.page ที่จะส่ง หรือทุกเพจ ใช้ charset tis-620 ดังนั้น มิจำเป็นต้อง ตั้ง charset เป้น utf-8
2.dbs ผมเป็น access
วิธีการข้างล่างจะช่วยแก้เรื่อง ajax รับค่าจาก tis-620 และ ส่งออกมาเป็น utf-8 ดังนั้นเมื่อทำการจัดเก็บในฐายข้อมูลจะพบว่าเป็น รหัส unicode ซึ่งอ่านไม่ออก และนำ้มาแสด่งผลใน page ที่กำหนด charset เป็น tis-620 หรือ windows-874 ซึ่งอ่านไม่ออก
วิธีแก้ไข
1.ก่อนส่งเข้า function ของ ajax โดยเฉพาะทำงานร่วมกับภาษาไทย เช่น tis-620 ให้ เข้ารหัสก่อน ด้วย javascript คือ
encodeURIComponent($("#remark").val()) ผลลัพธ์ก่อนเข้ารหัสจะเป็น อย่างเช่น คำว่า ทดสอบ1 จะได้ดังล่าง
%E0%B8%97%E0%B8%94%E0%B8%AA%E0%B8%AD%E0%B8%9A1
2.และเมื่อ ajax ประมวลผลเสร็จ จะได้ output เป็น utf-8 ดังนั้นเพื่อให้ผลลัพธ์ที่ถูกต้องคืออ่านไทยได้
ทั้งในหน้าเพจ tis-620 หรือใน ฐานข้อมูล ต้องทำงการแปลงกลับก่อนโดย
ทำงานร่วมกับ function ข้างล่าง สร้าง function javascript ให้ใช้งานใน asp code
<% FUNCTION URLDecode(str)
Dim objScript,RepUrlDecode
Set objScript = Server.CreateObject("ScriptControl")
objScript.Language = "JavaScript"
RepUrlDecode = objScript.Eval("decodeURIComponent(""" & str & """)")
URLDecode = objScript.Eval("decodeURIComponent(""" & RepUrlDecode & """)")
Set RepUrlDecode = NOTHING
Set objScript = NOTHING
END FUNCTION
%>
จะสังเกตว่า ผมต้องทำ decodeURIComponent 2 รอบ ภายใน function เพราะ ajax จะให้ output ออกมาดังล่าง
'mystr=request.Form("realname") สตริงออกมาจาก ajax utf-8 จะมี %25ติดมา เข้ารหัสในหน้า page tis-620
'sql=URLDecode(mystr) ถอดรหัส utf-8 เป็น unicode char จะตัด %25ออก จะมีค่าเท่ากับ encodeURIComponent ที่ทำให้หน้า page tis-620
'sql1=URLDecode(sql) ถอดรหัส unicode char เป็น tis-620 ใช้ decodeURIComponent ถอดมาเป็น tis-620 ในหน้า tis-620
ตามที่ผมได้อธิบายดังข้างบน ก็จะแก้ ปัญหาเรื่อง ajax ใน tis-620 ได้
3..ในหน้า ที่ ต้องทำการ ทำ sql query ก็จะทำการแปลงรหัสก่อนจะส่งใน sql string
sql="UPDATE userinfo SET "
sql=sql & "logname='" & URLDecode(request.Form("logname")) & "', "
sql=sql & "remark='" & URLDecode(request.Form("remark")) & "', "
'sql=sql & "level=" & URLDecode(request.Form("level")) & ", "
sql=sql & "realname='" & URLDecode(request.Form("realname")) & "', "
sql=sql & "realsurname='" & URLDecode(request.Form("realsurname")) & "', "
sql=sql & "realposition='" & URLDecode(request.Form("realposition")) & "' "
sql=sql & "WHERE ID=" & request.Form("id") & ";"
4.เราก็จะได้ output ที่ถูกต้อง แสดงผลภาษาไทยได้
---------------------------------------------------------------------------------------
โค้ดชื่อ tableloginshow.asp
<!Doctype html>
<html>
<head>
<meta charset="tis-620" />
</head>
<!-- #include virtual="/v1/salary/dbconnect.asp"-->
<%
response.Expires=-1
response.CharSet="tis-620"
id=Request.querystring("id")
'response.Write(" :" & id)
'response.End
if id="" then response.end
set rs = Server.CreateObject("ADODB.Recordset")
rs.open "SELECT * FROM userinfo where ID=" & id & ";",conn
%>
<script>
$(document).ready(function () {
$("#userinfoUpdate").click(function () {
var myprompt = confirm("ต้องการบันทึก");
if (myprompt) {
var maxlevel = Number($("#level").attr("max"));
var myvalue = $("#level").attr("value").valueOf();
//alert(typeof (maxlevel) + ":" + typeof (myvalue));
if (myvalue > maxlevel) {
alert("ต้องการตัวเลข level ช่วง 1-" + maxlevel.toString() + "\nกรุณาใส่ใหม่!");
} else {
// alert($("#ID").val());
$.post("userinfoUpdate.asp", {
id: $("#ID").val(),
logname: encodeURIComponent($("#logname").val()),
//pw: $("#pw").val(),
remark: encodeURIComponent($("#remark").val()),
level: encodeURIComponent($("#level").val()),
// pk_passkey: $("#pk_passkey").val(),
realname: encodeURIComponent($("#realname").val()),
realsurname: encodeURIComponent($("#realsurname").val()),
realposition: encodeURIComponent($("#realposition").val()),
}, function (data, status) {
alert("Data: " + data + "\nStatus: " + status);
$("#changepwd").click();
});
}
}
});
$("#utf8").click(function () {
var xxx = $("#realname").val();
var ixxx = decodeURI(xxx);
alert(ixxx);
});
$("#userinfodelete").click(function () {
var myprompt = confirm("ต้องการลบ?");
if (myprompt) {
var myid = $("#ID").val();
// alert(myid);
$.get("userinfoDelete.asp", { id: myid }, function (data, status) {
alert("Data: " + data + "\nStatus: " + status);
$("#changepwd").click();
});
}
});
//logname,pw,remark,level,pk_passkey,realname,realsurname,realposition"
$("#userinfonew").click(function () {
if ($(this).text() == "สร้างใหม่") {
$("#userinfodelete").attr("disabled", true);
$("#userinfoUpdate").attr("disabled", true);
$(this).text("บันทึก");
$("#tableuserinfo input").val("");
$("#tableuserinfo .pwd").attr("disabled", false);
} else {
var myprompt = confirm("ต้องการสร้างใหม่?");
if (myprompt) {
alert("new rec");
$.ajax({
url: 'userinfoAdd.asp',
data: {
logname: $("#logname").val(),
pw: $("#pw").val(),
remark: $("#remark").val(),
level: parseInt($("#level").val()),
pk_passkey: $("#pk_passkey").val(),
realname: $("#realname").val(),
realsurname: $("#realsurname").val(),
realposition: $("#realposition").val()
},
success: function (data, status, xhr) {
alert("Data success: " + data + "\nStatus: " + status);
},
error: function (data, status, xhr) {
alert("Data error: " + data + "\nStatus: " + status);
},
type: 'post'
});
}
}
});
$("#myclose").click(function () {
// alert("test");
// $("#showEditUser").html("<table style='border:1px solid black;'><tr><td>test</td><td>test</td></tr></table>");
$("#showEditUser1").hide();
// $("#showEditUser").load('tableLoginShow.asp?id=' + $(this).val());
});
});
</script>
<body>
<%response.write("***ช่อง id password passkey แก้ไขหรือเปลี่ยนแปลงไม่ได้ ถ้าต้องการแก้ไขให้ลบและสร้างใหม่")%><br />
<button name="save" value="save" id="userinfoUpdate">แก้ไข(รอทดสอบ)</button>
<button name="delete" value="delete" id="userinfodelete">ลบ</button>
<button name="new" value="new" id="userinfonew">สร้างใหม่(รอทดสอบ)</button>
<button name="close" value="close" id="myclose">ปิด</button>
<button name="utf8" value="utf8" id="utf8">urlencode from ajax check</button>
<br />
<table id="tableuserinfo" style="background-color:#b0c4de;border:1px solid black;">
<%
for each x in rs.Fields
if lcase(x.name) ="id" then%>
<tr>
<td><%=x.name%> </td>
<td><input type="text" disabled="disabled" name="<%=x.name%>" value="<%=x.value%>" ID="<%=x.name%>"</td>
<%elseif x.name="pk_passkey" or x.name="pw" or lcase(x.name) ="id" then%>
<tr>
<td><%=x.name%> </td>
<td><input class="pwd" disabled="disabled" type="password" name="<%=x.name%>" value="<%=x.value%>" size="20" ID="<%=x.name%>" ></td>
<%elseif x.name="logname" then%>
<tr>
<td><%=x.name%> </td>
<td><input type="text" name="<%=x.name%>" value="<%=x.value%>" size="20" ID="<%=x.name%>" ></td>
<%elseif x.name="level" then%>
<tr>
<td><%=x.name%> </td>
<td><input id="<%=x.name%>" type="number" min="1" max=<%=session("level")%> name="<%=x.name%>" value="<%=x.value%>" />*ต้องการค่าระหว่าง 1-<%=session("level")%></td>
<td>(level 3=all ,invisible salary for each employee)(level 7=all,can edit salary rec. in ss mode)</td>
<%else%>
<tr>
<td><%=x.name%> </td>
<td><input type="text" name="<%=x.name%>" value="<%=x.value%>" size="20" ID="<%=x.name%>" /> </td>
<% end if
next
rs.close
conn.close
%>
</tr>
</table>
<br />
</body>
</html>
โค้ดล่าง userinfoupdate.asp
<!-- #include virtual="/v1/salary/dbconnect_grandattendancetosalary.asp"-->
<%
dim sql
response.Expires=-1
response.CharSet="tis-620"
if Session("login")="" then
response.Write("<script>alert('หมดเวลา session')</script>")
response.Redirect(server.MapPath("/v1/index.asp"))
response.End
end if
FUNCTION URLDecode(str)
Dim objScript,RepUrlDecode
Set objScript = Server.CreateObject("ScriptControl")
objScript.Language = "JavaScript"
RepUrlDecode = objScript.Eval("decodeURIComponent(""" & str & """)")
URLDecode = objScript.Eval("decodeURIComponent(""" & RepUrlDecode & """)")
Set RepUrlDecode = NOTHING
Set objScript = NOTHING
END FUNCTION
'mystr=request.Form("realname") สตริงออกมาจาก ajax utf-8 จะมี %25ติดมา เข้ารหัสในหน้า page tis-620
'sql=URLDecode(mystr) ถอดรหัส utf-8 เป็น unicode char จะตัด %25ออก จะมีค่าเท่ากับ encodeURIComponent ที่ทำให้หน้า page tis-620
'sql1=URLDecode(sql) ถอดรหัส unicode char เป็น tis-620 ใช้ decodeURIComponent ถอดมาเป็น tis-620 ในหน้า tis-620
sql="UPDATE userinfo SET "
sql=sql & "logname='" & URLDecode(request.Form("logname")) & "', "
sql=sql & "remark='" & URLDecode(request.Form("remark")) & "', "
'sql=sql & "level=" & URLDecode(request.Form("level")) & ", "
sql=sql & "realname='" & URLDecode(request.Form("realname")) & "', "
sql=sql & "realsurname='" & URLDecode(request.Form("realsurname")) & "', "
sql=sql & "realposition='" & URLDecode(request.Form("realposition")) & "' "
sql=sql & "WHERE ID=" & request.Form("id") & ";"
'response.Write(mystr & " " & sql & " " & sql1)
'response.End
conn2.Execute sql,recaffected
if err<>0 then
'Response.Write("No update permissions!")
else
'Response.Write("<h3>" & recaffected & " record added</h3>")
end if
conn2.close
on error goto 0
%>
ไม่มีความคิดเห็น:
แสดงความคิดเห็น