PDO_ODBC 和本機PHP ODBC 功能傳回的文字編碼不是,無論它如何儲存在Access 資料庫中。在網頁中顯示資料或使用其他需要 UTF-8 輸入的 PHP 函數時,這可能會導致問題。
解決此問題的一種方法是使用 utf8_encode()函數將傳回的文字轉換為 UTF-8。但是,這僅適用於 ISO-8859-1 編碼的字元。對於其他編碼方式編碼的字符,例如 Windows-1252,此方法不起作用。
更全面的解決方案是使用 mb_convert_encoding() 函數將傳回的文字轉換為 UTF-8。此函數可以處理更廣泛的編碼,包括Windows-1252。但是,它仍然沒有解決未以 Unicode 形式儲存在資料庫中的字元的問題。
要完全解決該問題,帶有 ADODB Connection 和 Recordset 物件的 COM 必須被使用。這些物件允許明確指定 UTF-8 代碼頁。透過使用 CP_UTF8 選項開啟連接和記錄集,從資料庫檢索的所有資料都會自動轉換為 UTF-8,無論其儲存方式為何。
這裡是示範如何使用 ADODB 的完整修復的範例程式碼片段:
<code class="php"><?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中文網其他相關文章!