一次抓取 MSSQL 數據資料的意外

在學習 PHP & 使用 Eclipse 的過程中,曾記錄下一篇心得文章:PHP PDO 連接 MSSQL 資料庫遇見過的問題

依著那些自信,還以為日後抓取數據庫資料可能會一帆風順,不料短短一天,就破功了。 #$%#$%…

使用如下的程式碼:(截錄)

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="
http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=big5" />
<title>IEDB01-iepa00h</title>
</head>
<body>

<?php
try
{
    define(sp, '&nbsp;');
    // 設定 MSSQL 資料庫的 DSN
    $dsn = 'mssql:host=localhost;dbname=DB01;';
    $user = 'sa';
    $password = 'DB20120604';
    // 建立 PDO 物件
    $pdo = new PDO($dsn, $user, $password);
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

卻產生下面的中文亂碼情形 !!

image

心中真是 ⅩⅩ○○…
明明同樣的程式,之前是可以正常運作了,怎會今天就停擺?

心有不干,不把問題找出來,那會心安?
於是,重新再從資料庫字碼的設定及抓資料的程式碼存檔等方面找起,一切多符合先前所列的規則。
最後,只能比較不可正常運行及可正常運行程式檔案的大小內容

結果發現到 不可正常運行 與 可正常運行 的檔案,有差異。
不可正常運行的檔案會比可正常運行的檔案多出 3 Bytes

有的這樣的發現,就好辦了;接下來就是 Hex 的比對。
不可正常運作:
image

可正常運作:
image 

哦,這下明白了。

EF BB BF 這三碼不就是 Unicode 的 BOM 嗎?(可參考文章)

補充說明:
要去除多餘的 3 Bytes 資料,可以使用 PSPad 工具程式開啟該檔案,重新設定檔案的格式並存檔,即可解決問題。
image

至于,為什麼會產生 3個多餘的字元,就只能等以後有空再查證了。

願這篇文章能對你有所助益 !!  ( 神:願你平安 )

沒有留言: