ช่วยหน่อยครับ PHP ดึงข้อมูลจาก SQL SERVER ออกมาเป็นภาษาต่างด้าว

เริ่มโดย id09318, 03 พฤศจิกายน 2014, 19:15:04

หัวข้อก่อนหน้า - หัวข้อถัดไป

0 สมาชิก และ 1 ผู้มาเยือน กำลังดูหัวข้อนี้

id09318

 :wanwan017:
ข้อมูลใน SQL SERVER เป็นภาษาไทยครับ แต่พอดึงออกมาเป็น ʵҧ��
Database กำหนด Collation เป็น Thai_CI_AS

นี่คือฟังชั่นครับ
function topmoney($svname,$svuser,$svpass)
      {
            $dbnamesv = "xxx";
            $coninfo = array( "Database"=>$dbnamesv, "UID"=>$svuser, "PWD"=>$svpass);
            $conn = sqlsrv_connect( $svname, $coninfo);
            $sql="select top 15 * from TB_B1 ORDER BY TB_MONEY DESC";
            $result=sqlsrv_query($conn, $sql, array(), array("Scrollable"=>"buffered"));
            $c = 1;
           
            while( $row = sqlsrv_fetch_array( $result, SQLSRV_FETCH_ASSOC) )
            {
                        if(!preg_match("/^@/",$row[CHARACTER_NAME] ))
                        {
                  echo '

                        <div class="row">
                             
                              <div class="col-xs-2">
                                    '.$c.'&nbsp;.&nbsp;'.$row['CHARACTER_NAME'].'
                              </div>
                             
                        </div>
                  ';
                         
                          $c++;
                         }

                 
            }

            sqlsrv_free_stmt($result);
            sqlsrv_close($conn);

      }


ตัวนี้แสดงผลครับ
<?php
    error_reporting
(0);
    include(
"config.php");
    include(
"functions.php");
?>

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>TEST</title>
</head>
<body>
<?php
topmoney
($svname,$svuser,$svpass)
?>

</body>
</html>
มีแต่วันนี้ที่มีค่า ไม่มีวันหน้าและวันหลัง.

wasantec


id09318

อ้างถึงจาก: wasantec ใน 03 พฤศจิกายน 2014, 19:20:23
ลองเปลี่ยนเป็น UTF-8 Unicode (utf8)

เปลี่ยนแล้วครับท่าน! ไม่หาย  :P
มีแต่วันนี้ที่มีค่า ไม่มีวันหน้าและวันหลัง.

nattapol196


id09318

อ้างถึงจาก: nattapol196 ใน 03 พฤศจิกายน 2014, 19:37:13
mysql_query("set NAMES utf8 ");

ก่อน $sql="select top 15 * from TB_B1 ORDER BY TB_MONEY DESC";

ครับ

ใส่แล้วครับ ไม่หายครับ  :-X
มีแต่วันนี้ที่มีค่า ไม่มีวันหน้าและวันหลัง.

gulmiku

อ้างถึงจาก: id09318 ใน 03 พฤศจิกายน 2014, 20:08:14
อ้างถึงจาก: nattapol196 ใน 03 พฤศจิกายน 2014, 19:37:13
mysql_query("set NAMES utf8 ");

ก่อน $sql="select top 15 * from TB_B1 ORDER BY TB_MONEY DESC";

ครับ

ใส่แล้วครับ ไม่หายครับ  :-X

ใส่ต่อบรรทัด connect เข้าสู่ db เลยนะครับ
รับทำ theme wordpress เริ่มต้นที่ 8,000 บ.
รับเขียนระบบเว็บไซต์ เริ่มต้นที่ 10,000บ.
รับแก้งาน แก้บัค , เขียน scripts อื่นๆ,เขียน plugin wordpress
สนใจ PM ครับ

id09318

อ้างถึงจาก: gulmiku ใน 03 พฤศจิกายน 2014, 20:44:28
ใส่ต่อบรรทัด connect เข้าสู่ db เลยนะครับ

ใส่แล้วครับ ไม่หายครับ ต่างด้าวอยู่  :wanwan004:
มีแต่วันนี้ที่มีค่า ไม่มีวันหน้าและวันหลัง.

ohmohm

หน้าเว็บนี้ ที่ browser ของผม ผมลองเปลี่ยนมุมมองจาก UTF-8 เป็น Thai พบคำว่า สตาง ซึ่งน่าจะเป็นข้อความสกุลเงิน
ผมแกะดูจาก HTML source แล้วเป็นเลขฐานสิบหก CAB5 D2A7 EFBF BDEF BFBD

ลอง

print convert(varchar(10), 0xCAB5D2A7EFBFBDEFBFBD)

หน่อยซิครับ

แล้ว column CHARACTER_NAME เป็น varchar หรือ nvarchar ครับ หรือว่าเป็นอย่างอื่น
บน Microsoft SQL Server ชอบใช้ UTF-16/UCS-2 ไม่ใช่ UTF-8 ซะด้วยซิ


goodwide


ReleaseCandidate

ที่ /etc/mysql/my.cnf
[client]
default-character-set = utf8
[mysqld]
skip-character-set-client-handshake
init_connect = 'SET collation_connection = utf8_general_ci'
init_connect = 'SET NAMES utf8'
character-set-server = utf8


restart mysql แล้วเช็ค mysql status
ถ้าได้แบบนี้ที่ mysql ก็น่าจะโอเคล่ะ
Server characterset:    utf8
Db     characterset:    utf8
Client characterset:    utf8
Conn.  characterset:    utf8


ที่ php.ini
default_charset = "UTF-8"

ที่ webserver ก็ควร set ให้เป็น utf8 ด้วย
# nginx
charset utf-8;
# apache
AddDefaultCharset UTF-8

ลองดูนะครับ :wanwan019:
[direct=https://pumplike.pro/]ปั้มไลค์ ปั้มติดตาม ปั้มไลค์รูป[/direct] [direct=https://pumplike.pro/]เพิ่มไลค์ เพิ่มติดตาม เพิ่มไลค์รูป[/direct] [direct=https://pumplike.pro/]ฟรีปั้มไลค์ เพิ่มไลค์บนมือถือ ปั้มไลค์บนมือถือ[/direct]

id09318

อ้างถึงจาก: ReleaseCandidate ใน 04 พฤศจิกายน 2014, 17:42:56
ที่ /etc/mysql/my.cnf
[client]
default-character-set = utf8
[mysqld]
skip-character-set-client-handshake
init_connect = 'SET collation_connection = utf8_general_ci'
init_connect = 'SET NAMES utf8'
character-set-server = utf8


restart mysql แล้วเช็ค mysql status
ถ้าได้แบบนี้ที่ mysql ก็น่าจะโอเคล่ะ
Server characterset:    utf8
Db     characterset:    utf8
Client characterset:    utf8
Conn.  characterset:    utf8


ที่ php.ini
default_charset = "UTF-8"

ที่ webserver ก็ควร set ให้เป็น utf8 ด้วย
# nginx
charset utf-8;
# apache
AddDefaultCharset UTF-8

ลองดูนะครับ :wanwan019:

ของผมเป็น MSSQL ครับ
มีแต่วันนี้ที่มีค่า ไม่มีวันหน้าและวันหลัง.

ohmohm

ตรง

$row['CHARACTER_NAME']


ลองเปลี่ยนเป็น

iconv('CP874', 'UTF-8', $row['CHARACTER_NAME'])


ดูซิครับ ถ้าไม่ได้ผลลอง เปลี่ยนตรง cp874 เป็นตัวเลือกอื่นๆ เช่น windows-874, ISO-8859-11, TIS-620 หรือ MacThai

id09318

อ้างถึงจาก: ohmohm ใน 05 พฤศจิกายน 2014, 10:19:05
ตรง

$row['CHARACTER_NAME']


ลองเปลี่ยนเป็น

iconv('CP874', 'UTF-8', $row['CHARACTER_NAME'])


ดูซิครับ ถ้าไม่ได้ผลลอง เปลี่ยนตรง cp874 เป็นตัวเลือกอื่นๆ เช่น windows-874, ISO-8859-11, TIS-620 หรือ MacThai

ได้แล้วครับ ขอบคุณมากครับ  :wanwan017: :wanwan017: :wanwan017: +1คับ
มีแต่วันนี้ที่มีค่า ไม่มีวันหน้าและวันหลัง.

nong4534

Rangforever แจกโค้ดตัวอย่างโปรเจคPHPฟรี(เขียนโปรแกรมphp java C#)
PHP Future เขียนโปรแกรมภาษาphp (แจกโปรเจคฟรี แหล่งเรียนรู้ไอที เทคโนโลยี)