首頁  >  文章  >  後端開發  >  如何透過 PDO_ODBC 從 Access 擷取 UTF-8 重音字元?

如何透過 PDO_ODBC 從 Access 擷取 UTF-8 重音字元?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-10-20 17:50:02512瀏覽

How to Retrieve UTF-8 Accented Characters from Access via PDO_ODBC?

無法透過PDO_ODBC 存取擷取UTF-8 重音字元

問題

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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn