PDO_ODBC檢索Access UTF-8重音字元失敗
問題描述
問題描述Incorrect string value: '\xE9d'直接輸出帶有「無效」字元的行文字時,瀏覽器會顯示一個黑色方塊中的問號(因此 é 會變成這個無效符號)。 注意:同一表單可以很好地接受、保存和顯示文字方塊中的“é”,用於該資料庫上傳的標題。此外,如果「另存為」該頁面並重新打開,則「é」可以正確顯示。 以下是連接方式:$conn = new PDO("odbc:Driver={Microsoft Access Driver (*.mdb)};Dbq=$fileLocation;SystemDB=$securefilePath;Uid=developer;Pwd=pass;charset=utf;");
$conn -> exec("set names utf8");
問題解決
1. 簡單但不完整的修復
實際上,Access ODBC返回的文字與Windows -1252字元編碼中該字元匹配,即使它儲存在Access資料庫中作為Unicode字元。因此,對於範例表“Teams”,Team ----------------------- Boston Bruins Canadiens de Montréal Федерация хоккея России
<code class="php">header('Content-Type: text/html; charset=utf-8'); ?> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Access character test</title> </head> <body> <?php $connStr = 'odbc:' . 'Driver={Microsoft Access Driver (*.mdb)};' . 'Dbq=C:\Users\Public\__SO\28311687.mdb;' . 'Uid=Admin;'; $db = new PDO($connStr); $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $sql = "SELECT Team FROM Teams"; foreach ($db->query($sql) as $row) { $s = $row["Team"]; echo $s . "<br/>\n"; } ?> </body> </html></code>
Boston Bruins Canadiens de Montr�al ????????? ?????? ??????
2. 完整的修復
要獲得完全的UTF-8支持,我們需要使用帶有ADODB連接和記錄集對象的COM,如下所示:<code class="php">header('Content-Type: text/html; charset=utf-8'); ?> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Access character test</title> </head> <body> <?php $connStr = 'Driver={Microsoft Access Driver (*.mdb)};' . 'Dbq=C:\Users\Public\__SO\28311687.mdb'; $con = new COM("ADODB.Connection", NULL, CP_UTF8); // specify UTF-8 code page $con->Open($connStr); $rst = new COM("ADODB.Recordset"); $sql = "SELECT Team FROM Teams"; $rst->Open($sql, $con, 3, 3); // adOpenStatic, adLockOptimistic while (!$rst->EOF) { $s = $rst->Fields("Team"); echo $s . "<br/>\n"; $rst->MoveNext; } $rst->Close(); $con->Close(); ?> </body> </html></code>
以上是為什麼 PDO_ODBC 無法從 Access 擷取 UTF-8 重音字元?的詳細內容。更多資訊請關注PHP中文網其他相關文章!