Register Register Member Login Member Login Member Login Forgot Password ??
PHP , ASP , ASP.NET, VB.NET, C#, Java , jQuery , Android , iOS , Windows Phone
 

Registered : 109,027

HOME > PHP > PHP Forum > เขียน php ติดต่อฐานข้อมูล mssql ที่มี chartset เป็น tis-620



 

เขียน php ติดต่อฐานข้อมูล mssql ที่มี chartset เป็น tis-620

 



Topic : 054040



โพสกระทู้ ( 156 )
บทความ ( 0 )



สถานะออฟไลน์




หลังจากที่ผมทำการค้นหาข้อมูลเรื่องการใช้ php ติดต่อฐานข้อมูล mssql ที่มีการเข้ารหัสแบบเก่าเป็น tis-620 แล้วผลลัพธ์ออกมาเป็นภาษาที่อ่านไม่ออก ก็ไม่พบว่ามีวิธีไหนที่ดีที่สุดครับ เท่าที่ผมลองเองและหาเจอมีดังนี้

1. ใช้ function iconv() ในการแปลง - ผมลองแล้วไม่ work ครับ
2. แก้ไขค่าใน php.ini ทีเป็น default charset ให้เป็น tis-620 วิธีนี้ใช้ได้ดีครับ แต่จะมีปัญหากับไฟล์เว็บที่ได้มีการเซฟเป็นแบบ utf-8 ซึ่งผลลัพธ์ก็คือข้อมูลที่มากจากฐานข้อมูลจะแสดงผลภาษาไทยได้ถูกต้อง แต่ภาษาไทยที่อยู่บนหน้าเว็บเราจะอ่านไม่ออก
3. ลองปรับแก้ใน php.ini ทีเ่ป็น mssql_charset = "tis-620" หรือ "utf-8" วิธีนี้ไม่มีผลกระทบอะไรเลย ไม่ work
4. ลองแก้ไข meta tag ของหน้าเว็บแต่ละหน้าให้เป็น tis-620 ไม่ work ครับ เนื่องจากการเซฟในตอนแรกเป็นแบบ utf-8 ไปแล้ว
5. วิธีที่ดีที่สุดตอนนี้คือ
5.1 ไปแก้ไขใน php.ini ให้เป็น charset = "tis-620"
5.2 เซฟไฟล์เว็บเราให้ encode แบบ tis-620

เท่านี้ก็จะแสดงภาษาไทยได้อย่างถูกต้อง แต่...

การทำแบบนี้เป็นการยึดหลักเเบบเก่า คือการใช้เข้ารหัสแบบ tis-620 ซึ่งปัจจุบันมันควรจะเป็น utf-8 กันหมดแล้ว โดยหากเราพัฒนา app ตัวใหม่เราก็ต้องใช้เป็น utf-8 ทั้งหมด ดังนั้น ผมไม่แน่ใจว่ามีใครเคยแก้ไขปัญหานี้ โดยที่ใช้ mssql ที่เข้ารหัสเป็น tis-620 แต่เราสามารถเชื่อมต่อ DB โดยเป็นแบบ utf เพื่อให้แสดงข้อมูลได้ถูกต้องครับ

ปล. อย่าถามว่าทำไมไม่เปลี่ยน mssql ให้เข้ารหัสแบบ utf-8 ซะหล่ะ ขอตอบเลยนะครับว่า ฐานข้อมูลของบริษัทผมใช้มานาน ซึ่งเค้าก็ไม่ผิดที่จะใช้แบบเก่ามาก่อน ซึ่งถ้าเรามา convert เป็น utf-8 ก็เรื่องใหญ่เลยล่ะครับ ^^ (หากใครมีคำแนะนำเรื่องนี้ก็บอกกันได้นะครับ)

ขอบคุณครับ



Tag : PHP, Ms SQL Server 2005







Move To Hilight (Stock) 
Send To Friend.Bookmark.
Date : 2011-01-06 11:41:11 By : nottp106 View : 9801 Reply : 16
 

 

No. 1



โพสกระทู้ ( 60 )
บทความ ( 0 )



สถานะออฟไลน์


ลองใส่
@ header("Content-type: text/xml; charset=utf-8")
ดูครับผมมมีปัญหายังไงบอกด้วยครับเผื่อจะช่วยได้






แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2011-01-06 15:45:34 By : gogo01
 


 

No. 2



โพสกระทู้ ( 156 )
บทความ ( 0 )



สถานะออฟไลน์


สามารถช่วยได้ครับ แต่ถ้า mssql ของเราเป็น tis-620 เราต้องยอมเสียหน้าเพจเราโดย encode เป็น windows-874 ก็จะใช้งานได้ แต่มันล้าสมัยครับ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2011-01-13 11:51:33 By : nottp106
 

 

No. 3

Guest


ถ้าอยากทันสมัยก็ แปลงฐานข้อมูลเก่าจาก tis-620 to utf-8 ซะ

แต่จริงๆ ถ้าเวลามีไม่มาก ก็ใช้แบบเดิมแหละดีแล้วและใช้ utf-8 เท่าที่จำเป็น
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2011-01-13 12:15:37 By : ...
 


 

No. 4



โพสกระทู้ ( 156 )
บทความ ( 0 )



สถานะออฟไลน์


ใช้ utf-8 เท่าที่จำเป็น?
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2011-01-13 13:10:05 By : nottp106
 


 

No. 5

Guest


ก็ถ้า tis620 ทำไม่ได้ก็ใช้ utf8 แทนไงครับ
อย่างส่งข้อมูลให้เว็บไซท์อื่นที่รับข้อมูล utf8
และหากต้องการแสดง utf8 ไว้หน้าเดียวกับ tis620 ได้ ก็แปลงข้อมูลก่อน
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2011-01-13 13:29:20 By : ...
 


 

No. 6



โพสกระทู้ ( 58 )
บทความ ( 0 )



สถานะออฟไลน์


ตอบความคิดเห็นที่ : 3 เขียนโดย : ... เมื่อวันที่ 2011-01-13 12:15:37
รายละเอียดของการตอบ ::
แปลงยังไงครับ วิธีนี้น่าสนใจดีครับ

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2011-01-14 23:34:33 By : tttaaammm
 


 

No. 7



โพสกระทู้ ( 484 )
บทความ ( 3 )



สถานะออฟไลน์


Code (PHP)
function tis620_to_utf8($tis) {
  for( $i=0 ; $i< strlen($tis) ; $i++ ){
    $s = substr($tis, $i, 1);
    $val = ord($s);
    if( $val < 0x80 ){
	 $utf8 .= $s;
    } elseif ((0xA1 <= $val and $val <= 0xDA) 
              or (0xDF <= $val and $val <= 0xFB))  {
	 $unicode = 0x0E00 + $val - 0xA0;
	 $utf8 .= chr( 0xE0 | ($unicode >> 12) );
	 $utf8 .= chr( 0x80 | (($unicode >> 6) & 0x3F) );
	 $utf8 .= chr( 0x80 | ($unicode & 0x3F) );
    }
  }
return $utf8;
} 
function utf8_to_tis620($string) {
  $str = $string;
  $res = "";
  for ($i = 0; $i < strlen($str); $i++) {
	if (ord($str[$i]) == 224) {
	  $unicode = ord($str[$i+2]) & 0x3F;
	  $unicode |= (ord($str[$i+1]) & 0x3F) << 6;
	  $unicode |= (ord($str[$i]) & 0x0F) << 12;
	  $res .= chr($unicode-0x0E00+0xA0);
	  $i += 2;
	} else {
	  $res .= $str[$i];
	}
  }
  return $res;
}

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2012-01-25 14:52:52 By : fossil31
 


 

No. 8

Guest


ขอบคุณครับ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2012-07-19 14:59:37 By : rachan
 


 

No. 9



โพสกระทู้ ( 21 )
บทความ ( 0 )



สถานะออฟไลน์


ขอบคุณ rith โพส 7 ครับ เจ๋งสุดดดดดดดดดดดดดดดดดด
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2015-07-05 17:34:30 By : bonparadorn
 


 

No. 10



โพสกระทู้ ( 1,636 )
บทความ ( 0 )



สถานะออฟไลน์
Facebook

php มีคำสั่งแปลงให้อยู่แล้วครับ
$tis2utf = iconv('tis620','utf8',$string); $utf2tis = iconv('utf8','tis620',$string);

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2015-08-30 08:58:48 By : NewbiePHP
 


 

No. 11



โพสกระทู้ ( 10 )
บทความ ( 1 )



สถานะออฟไลน์


ผมใช้อยู่ครับ โดยวิธีการทำนั้นไม่อยากครับ แต่หน้า app เราจะต้อง encode เป็น windows-874 และ tis-620 ครับ

Config ของ php ไม่ต้องเปลี่ยนนะครับ และฟังก์ชัน iconv ก็ต้องใช้อยู่ครับ

1. เงื่อนไขแรก คุณต้องพัฒนาโปรแกรมด้วย windows ครับ และทุกไฟล์ที่ save ต้องบันทึกเป็น ANSI หรือ default windows ครับ
ถ้าใช้ server เป็น linux ค่อยโอนไฟล์ไปครับ

2. ไฟล์ที่เขียนเป็น .html ธรรมดา จะต้อง แปะตัวนี้ไว้ครับ

<meta http-equiv="Content-Type" content="text/html;Charset=windows-874" />

3. ไฟล์ที่เขียนเป็น .php จะต้อง แปะตัวนี้ไว้ครับ

header("Content-Type:text/html; charset=TIS-620");

4. ตัวแปลที่ส่งผ่าน session สามารถใช้ภาษาไทยได้เลยครับ

5. ตัวแปลที่ส่งผ่าน ajax จะต้องผ่าน iconv ครับ เช่น $_GET, $_POST ครับ ดังนี้ครับ

$q = iconv("UTF-8", "TIS-620", $_GET["q"]);

ถ้ามีการ encode จะต้อง decode ก่อนเข้าฟังก์ชัน iconv นะครับ เช่น

ส่งโดย return "" + urlData + "?q=" +encodeURIComponent(this.value);

เวลารับ $q = iconv("UTF-8", "TIS-620", urldecode($_GET["q"]));

รายละเอียดประมาณนีครับ ทดลองดูครับ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2015-09-02 09:50:14 By : mrchok
 


 

No. 12



โพสกระทู้ ( 200 )
บทความ ( 0 )



สถานะออฟไลน์


ถึงฐานข้อมูลจะเป็น tis-620
แต่ไม่เข้าใจว่า ทำไมต้องกำหนดไฟล์ และ/หรือ charset เป็น Charset=windows-874 และ/หรือ charset=TIS-620
ในเมื่อใช้การแปลงค่าเหมือนเดิม
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2015-09-02 10:00:04 By : CasanovaKung
 


 

No. 13



โพสกระทู้ ( 10 )
บทความ ( 1 )



สถานะออฟไลน์


ตอบความคิดเห็นที่ : 12 เขียนโดย : CasanovaKung เมื่อวันที่ 2015-09-02 10:00:04
รายละเอียดของการตอบ ::
. การแปลงค่าใช้เฉพาะ ค่าที่ส่งผ่านไปยัง .php โดยใช้ Ajax ครับ (XMLHttpRequest)
เนื่องจากตัว component Ajax จะแปลงค่าทั้งหมด ไปเป็น utf-8 ครับจึงต้องแปลงค่า
ถ้าส่งโดยใช้ window.location.. หรือ submit ผ่าน action ของ form ไม่ต้องแปลงครับ

หรือสรุปว่าถ้าเขียน php แบบธรรมดา กำหนด charset ตามที่ระบุไว้เท่านั้นครับ ไม่ต้องใช้ iconv


แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2015-09-04 15:34:49 By : mrchok
 


 

No. 14



โพสกระทู้ ( 200 )
บทความ ( 0 )



สถานะออฟไลน์


เคยเขียนแต่แบบ
file format "UTF-8"
<meta charset="uft-8" />

ส่งค่าผ่าน AJAX ปกติ
แล้วค่อย convert ค่าเอา
เช่น getdata.php
Code (PHP)
$value = iconv('utf-8', 'tis-620', $value);
// พอส่งกลับ
$return = iconv('tis-620', 'utf-8', $return);
แบบนี้

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2015-09-04 15:51:22 By : CasanovaKung
 


 

No. 15



โพสกระทู้ ( 10 )
บทความ ( 1 )



สถานะออฟไลน์


แบบนั้นก็ได้นะครับ

แต่อาจจะเกิดปัญหา ในไฟล์ .php ครับ
ตอนที่นำค่ามาสร้าง sql string แล้วส่งไปให้ mssql_query ครับ

อาจจะเกิด error หรือไม่ได้ข้อมูลตามที่ต้องการครับ

ต้องลองทดลองดูครับ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2015-09-04 16:10:59 By : mrchok
 


 

No. 16



โพสกระทู้ ( 200 )
บทความ ( 0 )



สถานะออฟไลน์


ตอบความคิดเห็นที่ : 15 เขียนโดย : mrchok เมื่อวันที่ 2015-09-04 16:10:59
รายละเอียดของการตอบ ::
ถ้าแปลงค่าให้ได้ format ตามที่ database เก็บ ก็ไม่น่ามีปัญหาครับ

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2015-09-04 16:14:29 By : CasanovaKung
 

   

ค้นหาข้อมูล


   
 

แสดงความคิดเห็น
Re : เขียน php ติดต่อฐานข้อมูล mssql ที่มี chartset เป็น tis-620
 
 
รายละเอียด
 
ตัวหนา ตัวเอียง ตัวขีดเส้นใต้ ตัวมีขีดกลาง| ตัวเรืองแสง ตัวมีเงา ตัวอักษรวิ่ง| จัดย่อหน้าอิสระ จัดย่อหน้าชิดซ้าย จัดย่อหน้ากึ่งกลาง จัดย่อหน้าชิดขวา| เส้นขวาง| ขนาดตัวอักษร แบบตัวอักษร
ใส่แฟลช ใส่รูป ใส่ไฮเปอร์ลิ้งค์ ใส่อีเมล์ ใส่ลิ้งค์ FTP| ใส่แถวของตาราง ใส่คอลัมน์ตาราง| ตัวยก ตัวห้อย ตัวพิมพ์ดีด| ใส่โค้ด ใส่การอ้างถึงคำพูด| ใส่ลีสต์
smiley for :lol: smiley for :ken: smiley for :D smiley for :) smiley for ;) smiley for :eek: smiley for :geek: smiley for :roll: smiley for :erm: smiley for :cool: smiley for :blank: smiley for :idea: smiley for :ehh: smiley for :aargh: smiley for :evil:
Insert PHP Code
Insert ASP Code
Insert VB.NET Code Insert C#.NET Code Insert JavaScript Code Insert C#.NET Code
Insert Java Code
Insert Android Code
Insert Objective-C Code
Insert XML Code
Insert SQL Code
Insert Code
เพื่อความเรียบร้อยของข้อความ ควรจัดรูปแบบให้พอดีกับขนาดของหน้าจอ เพื่อง่ายต่อการอ่านและสบายตา และตรวจสอบภาษาไทยให้ถูกต้อง

อัพโหลดแทรกรูปภาพ

Notice

เพื่อความปลอดภัยของเว็บบอร์ด ไม่อนุญาติให้แทรก แท็ก [img]....[/img] โดยการอัพโหลดไฟล์รูปจากที่อื่น เช่นเว็บไซต์ ฟรีอัพโหลดต่าง ๆ
อัพโหลดแทรกรูปภาพ ให้ใช้บริการอัพโหลดไฟล์ของไทยครีเอท และตัดรูปภาพให้พอดีกับสกรีน เพื่อความโหลดเร็วและไฟล์ไม่ถูกลบทิ้ง

   
  เพื่อความปลอดภัยและการตรวจสอบ กระทู้ที่แทรกไฟล์อัพโหลดไฟล์จากที่อื่น อาจจะถูกลบทิ้ง
 
โดย
อีเมล์
บวกค่าให้ถูก
<= ตัวเลขฮินดูอารบิก เช่น 123 (หรือล็อกอินเข้าระบบสมาชิกเพื่อไม่ต้องกรอก)







Exchange: นำเข้าสินค้าจากจีน, Taobao, เฟอร์นิเจอร์, ของพรีเมี่ยม, ร่ม, ปากกา, power bank, แฟลชไดร์ฟ, กระบอกน้ำ

Load balance : Server 01
ThaiCreate.Com Logo
© www.ThaiCreate.Com. 2003-2024 All Rights Reserved.
ไทยครีเอทบริการ จัดทำดูแลแก้ไข Web Application ทุกรูปแบบ (PHP, .Net Application, VB.Net, C#)
[Conditions Privacy Statement] ติดต่อโฆษณา 081-987-6107 อัตราราคา คลิกที่นี่