|
|
|
สอบถาม ภาษาไทยในไฟล์ dbf (Visual Foxpro) อ่านได้ภาษาไทยแต่ insert แล้วเป็นภาษาต่างดาว |
|
|
|
|
|
|
|
1234 ลองใส่แล้ว ยังไม่ได้ครับ
setlocale(LC_ALL, "en_US.UTF-8");
|
|
|
|
|
Date :
2019-02-12 14:37:17 |
By :
ilikeit |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
เอาโค๊ดใช้งานจริงมาดูดีกว่าไหม คือไม่รู้ที่มาที่ไปของตัวแปร อธิบายไปคุณก็เข้าใจหมดแล้วนั่้นแหล่ะ
สิ่งที่คุณเอามาลงให้ดูมันเป็นสิ่งที่คุณเข้าใจ ซึ่งมันก็ถูก
แต่พอทำงานจริง หลงลืมตรงไหนไปหรือเปล่า เอาตัวแปรจากไหนมา convert
|
|
|
|
|
Date :
2019-02-12 15:11:03 |
By :
Chaidhanan |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ขอบคุณครับ พี่ Chaidhanan
โค้ดแสดงการ Insert ครับ
Code (PHP)
setlocale(LC_ALL, "en_US.UTF-8");
function icv($value){
//setlocale(LC_ALL, "en_US.UTF-8"); ลองใส่แล้วเหมือนกันครับ
$value = strip_tags($value);
@$data = iconv('TIS-620','UTF-8',$value);
return $data;
}
function icvAdd($value){
//setlocale(LC_ALL, "en_US.UTF-8"); ลองใส่แล้วเหมือนกันครับ
$data = iconv('UTF-8','TIS-620',$value);
return $data;
}
$strSQL =" INSERT INTO TEST.DBF(doc,ref,datt,date2,desc2,desc3 ) VALUES (
,'R1234'
,{d'2019-01-04'}
,'IV1901037'
,{d'2019-01-01'}
,'".icvAdd('ส509')."'
,'".icvAdd('ถุง')."'
) ";
$query = odbc_exec($odbc, $strSQL) ;
if($query) {
echo 'Save Done';
}
}
ไฟล์แสดงผล
Code (PHP)
$sql = "SELECT * FROM TEST.DBF WHERE doc= 'R1234' ";
$rs = odbc_exec($odbc, $sql);
while(odbc_fetch_row($rs)){
$no++;
echo '<tr>';
echo '<td>'.$no.'</td>';
echo '<td>'.icv(odbc_result($rs, 'doc')).'</td>';
echo '<td>'.icv(odbc_result($rs, 'ref')).'</td>';
echo '<td>'.icv(odbc_result($rs, 'datt')).'</td>';
echo '<td>'.icv(odbc_result($rs, 'date2')).'</td>';
echo '<td>'.icv(odbc_result($rs, 'desc2')).'</td>';
echo '<td>'.icv(odbc_result($rs, 'desc3')).'</td>';
echo '</tr>';
ในไฟล์เมื่อเปิดดู รายการที่เพิ่มใหม่คือ ที่วงไว้คือ รายการใหม่ที่เพิ่มเข้าไปครับ
|
ประวัติการแก้ไข 2019-02-12 15:32:50 2019-02-12 15:36:55 2019-02-12 15:38:28
|
|
|
|
Date :
2019-02-12 15:32:23 |
By :
ilikeit |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@$data = iconv('TIS-620','UTF-8',$value); สีแดงเอาออก และเพิ่มสีน้ำเงิน
data = iconv('TIS-620','UTF-8//IGNORE',$value);
@ มันปิดเออเร่อร์ แต่ไม่ได้ข้อมูล
ส่วน ignore มันปรับปรุงข้อมูล
-----------------------------------
Code (PHP)
$strSQL =" INSERT INTO TEST.DBF(doc,ref,datt,date2,desc2,desc3 ) VALUES (
,'R1234'
,{d'2019-01-04'}
,'IV1901037'
,{d'2019-01-01'}
,'".icvAdd('ส509')."'
,'".icvAdd('ถุง')."'
) ";
โค๊ดข้างบน เป็น Hard code ภาษาไทยจะอ้างอิงจาก file type เช็คไฟล์ type ที่เขียนด้วยว่า เป็น utf8 หรือ ascii
ถ้าจะให้ดีให้ลอง จาก ตัวแปรget
Code (PHP)
$strSQL =" INSERT INTO TEST.DBF(doc,ref,datt,date2,desc2,desc3 ) VALUES (
,'R1234'
,{d'2019-01-04'}
,'IV1901037'
,{d'2019-01-01'}
,'".icvAdd($_GET['t1'])."'
,'".icvAdd($_GET['t2')."'
) ";
http://test.com?t1=ส509&t2=ถุง
จะได้รู้ว่า ข้อมูลมันมาเป็น utf8 จริง เพราะ browser มันใช้ utf8 เป็น base
setlocale(LC_ALL, "en_US.UTF-8"); ส่วนคำสั่งนี้ ยังไม่เคยใช้เลย 55555 เพราะไม่เคย ทำหลายภาษากับ ascii
|
ประวัติการแก้ไข 2019-02-12 16:05:37
|
|
|
|
Date :
2019-02-12 16:04:10 |
By :
Chaidhanan |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
พี่ Chaidhanan ขอบคุณครับ
หลังจากปรับปรุงโค้ด
ในดาต้าเบทครับ
บนหน้าเว็บไซต์ที่ใช้โค้ด้านบนครับ
|
ประวัติการแก้ไข 2019-02-12 16:25:53
|
|
|
|
Date :
2019-02-12 16:17:19 |
By :
ilikeit |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ลองทดสอบโค๊ดนี้ดูครับ ปรับ connection ปรับการคิวรี่ แสดงผล ด้วยนะครับ ผมแค่เดา field จากโค๊ด
Code (PHP)
<?PHP
$dsn = "Driver={Microsoft Visual FoxPro Driver};SourceType=DBF;SourceDB=c:\\yourdatabase;Exclusive=NO;collate=Machine;NULL=NO;DELETED=NO;BACKGROUNDFETCH=NO;";
$odbc = odbc_connect($dsn,'user','paswd') or die( odbc_error());
function icv($value){ return iconv('TIS-620','UTF-8//ignore',$value); }
function icvAdd($value){ return iconv('UTF-8','TIS-620',$value); }
if(isset($_POST['save'])){
$r = (object)$_POST; foreach($_POST as $k=>$v){ $data[]=(in_array($k,['desc2','desc3']) ? icvAdd($v) : $v);}
$da = [$r->doc, $r->ref, $r->datt, $r->date2, icvAdd($r->desc2), icvAdd($r->desc3)];
$strSQL ='INSERT INTO TEST.DBF( doc,ref,datt,date2,desc2,desc3 ) VALUES ( ?, { d ? } , ? , { d ? }, ? , ? )';
$stmt = odbc_prepare($odbc, $strSQL);
$success = odbc_execute($stmt, $data);
}
$stm = odbc_prepare($odbc, ' select * from TEST.DBF where doc=? ');
$result = odbc_execute($stm,['R1234']);
$row = odbc_fetch_object($result);
?><!DOCTYPE html>
<html>
<head>
<meta charset="utf8">
</head>
<body>
<form method="post">
doc = <input tpye="text" name="doc" value="<?=$row->doc?>"><br>
ref = <input tpye="text" name="ref" value="<?=$row->ref?>"><br>
datt = <input tpye="text" name="datt" value="<?=$row->datt?>"><br>
date2 = <input tpye="text" name="date2" value="<?=$row->date2?>"><br>
desc2 = <input tpye="text" name="desc2" value="<?=icv($row->desc2)?>"><br>
desc3 = <input tpye="text" name="desc3" value="<?=icv($row->desc3)?>"><br>
<button name="save">Save</button>
</form>
</body>
</html>
|
|
|
|
|
Date :
2019-02-12 20:16:02 |
By :
Chaidhanan |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Chaidhanan
ขอบคุณเดี่ยวจะลองดูครับผม
|
|
|
|
|
Date :
2019-02-13 08:11:42 |
By :
ilikeit |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
พี่ Chaidhanan
ขอบคุณนะครับ
เพิ่มข้อมูลได้นะครับ แต่ยังไม่ผลลัพธ์เหมือนเดิม
ภาษาไทยแสดงผลในบราวเซอร์ เป้นภาษาต่างดาวครับ
|
|
|
|
|
Date :
2019-02-13 09:06:05 |
By :
ilikeit |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
และใน parser เครื่องมือที่ใช้เปิด database เห็นเป็นภาษาไทยไหม
|
|
|
|
|
Date :
2019-02-13 11:07:21 |
By :
Chaidhanan |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ขอบคุณครับ Chaidhanan ไม่เป็นภาษาไทยเหมือนกันครับ
แต่ลองใช้
Code (PHP)
function icv($value){
$value = strip_tags($value);
$data = iconv('TIS-620','UTF-8',$value);
return $data;
}
กลับมาได้ภาษาไทยครับ แต่พอ กลับค่าใช้ฟังก์ชั่น
Code (PHP)
function icvAdd($value){
$data = iconv('UTF-8','TIS-620',$value);
return $data;
}
กลับไปในดาต้าเบท บันทึกได้ แล้วก็ไม่เป็นภาษาไทย แต่พอ iconv ออกมาแสดงผล ได้ผลลัพธ์ที่ไม่ถูกต้องครับ
ตัวอย่างเช่น
1. ข้อมูลเดิมผ่านระบบเก่า Ê509 แสดงออกมาเป็น ส509
2. ข้อมูลที่ insert เข้าไป à,ª509 แสดงออกมาเป็น เ,ช509
ประมาณนี้ครับ ตอนนี้ก็หาวิธีต่างๆ ลองทำอยู่ แต่ได้ผลลัพธ์ ข้อที่ 2 ครับ
|
|
|
|
|
Date :
2019-02-13 11:19:38 |
By :
ilikeit |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ทดสอบ charset ให้แน่ใจอีกที
ใส่ภาษาไทย ที่ parser ตรงๆเลยครับ
และอ่าน มาแสดงโดยไม่ต้อง convert อะไรทั้งสิ้น
ไฟล์ที่ 1 <meta charset="tis-620">
ไฟล์ที่ 2 <meta charset="utf-8">
ดูว่าไฟล์ไหน แสดงผลถูกต้อง
|
|
|
|
|
Date :
2019-02-13 12:06:12 |
By :
Chaidhanan |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Chaidhanan ขอบคุณครับ
พอลองใส่คำว่า ทดสอบ ตรงๆผ่านโปรแกรม DBF Manager กด Enter แล้วขึ้น ???????? เลยครับ
แสดงบนหน้าเว็บไม่ผ่าน iconv
ไฟล์ที่ 1 <meta charset="tis-620">
ไฟล์ที่ 2 <meta charset="utf-8">
ได้ผลลัพธ์ที่เหมือนกันเลยครับ
ข้อมูลในดาต้าเบท
ได้ตามข้างบนเลยครับ
|
ประวัติการแก้ไข 2019-02-13 13:16:56
|
|
|
|
Date :
2019-02-13 13:06:24 |
By :
ilikeit |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
จากรูป ใน คห 11 ผมว่ามันเป็นภาษาไทย แล้วนะครับ เพี่ยงแต่มัน ไม่ได้แสดงผลออกมาเป็นภาษาไทย
ต้องลองเปลี่ยน locale ของ window เป็น thai ก่อน เพราะบางโปรแกรม อาศัย system locale ในการแสดงผล
control panel -> ragion -> Administrative -> Change System Locale
ปล.ส่วนที่เวลากรอก แล้วเป็น ???? เพราะมันใช้ locale ที่เป็นภาษาอังกฤษ map keyboard เลยได้เป็น ? แทนอักษร
|
ประวัติการแก้ไข 2019-02-13 13:54:37
|
|
|
|
Date :
2019-02-13 13:51:30 |
By :
Chaidhanan |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
พี่ Chaidhanan บันทึกภาษาไทยได้แล้วครับ
ใช้
Code (PHP)
function icv($value){
$value = strip_tags($value);
$data = iconv('UTF-8','TIS-620',$value);
return $data;
}
งมมาหลายวันได้ผลแล้วครับ
ขอบคุณมากครับ
|
|
|
|
|
Date :
2019-02-13 15:40:06 |
By :
ilikeit |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Date :
2019-02-13 16:28:16 |
By :
mr.win |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Chaidhanan TC Admin
ขอบคุณครับผม
|
|
|
|
|
Date :
2019-02-14 08:17:42 |
By :
ilikeit |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
รบกวนสอบถามหน่อยค่ะ พอดีกว่าต้องการ SELECT ข้อมูล แต่ตอนนี้ลองทำตามและเชื่อมผ่าน dns ไม่สามารถ SELECT ข้อมูลได้ ขึ้น no such table ติดมาหลายวันแล้วค่ะ
ขอบคุณมากๆนะคะ
|
|
|
|
|
Date :
2021-09-23 14:28:38 |
By :
ปลาวาฬ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
คราวหลังส่วนที่เป็น text ก็copy แค่text มาลงก็พอนะครับ ก๊อปมาแก้ไขได้ง่าย
ข้อความ error ก็แจ้งมาตรงๆ แล้วครับ หาตารางไม่เจอ ก็อ้าง path ให้ถูกต้องครับ
|
|
|
|
|
Date :
2021-09-23 15:17:55 |
By :
Chaidhanan |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ลองดูลิงค์ข้างล่างครับ ผมก็ไม่ได้ใช้นานแล้ว ไม่รู้มันไปถีงไหนแล้ว
https://bytes.com/topic/php/answers/759660-odbc-connection-dbase-iv
https://www.vbforums.com/showthread.php?525095-RESOLVED-Connection-string-for-dbase-files
คำค้น
php: Connection string for DBase IV
|
ประวัติการแก้ไข 2021-09-24 04:02:00 2021-09-24 04:03:38
|
|
|
|
Date :
2021-09-24 03:59:59 |
By :
Chaidhanan |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Load balance : Server 02
|