Heim >Backend-Entwicklung >PHP-Tutorial >Wie rufe ich UTF-8-Akzentzeichen aus Access über PDO_ODBC ab?
PDO_ODBC und die nativen PHP-ODBC-Funktionen geben Text zurück, der nicht vorhanden ist UTF-8-kodiert, unabhängig davon, wie es in der Access-Datenbank gespeichert ist. Dies kann zu Problemen bei der Anzeige von Daten auf Webseiten oder der Verwendung anderer PHP-Funktionen führen, die UTF-8-Eingaben erwarten.
Ein Ansatz zur Lösung dieses Problems ist die Verwendung von utf8_encode() Funktion zum Konvertieren des zurückgegebenen Texts in UTF-8. Dies funktioniert jedoch nur für Zeichen, die in ISO-8859-1 kodiert sind. Für Zeichen, die in anderen Kodierungen wie Windows-1252 kodiert sind, funktioniert diese Methode nicht.
Eine umfassendere Lösung besteht darin, die Funktion mb_convert_encoding() zu verwenden, um den zurückgegebenen Text in UTF-8 zu konvertieren. Diese Funktion kann einen größeren Bereich von Kodierungen verarbeiten, einschließlich Windows-1252. Das Problem von Zeichen, die nicht als Unicode in der Datenbank gespeichert sind, wird jedoch immer noch nicht behoben.
Um das Problem vollständig zu lösen, muss COM mit ADODB-Verbindungs- und Recordset-Objekten ausgestattet sein verwendet werden. Diese Objekte ermöglichen die explizite Angabe der UTF-8-Codepage. Durch Öffnen der Verbindung und des Recordsets mit der Option CP_UTF8 werden alle aus der Datenbank abgerufenen Daten automatisch in UTF-8 konvertiert, unabhängig davon, wie sie gespeichert sind.
Hier ist ein Beispielcode-Snippet, das zeigt, wie der vollständige Fix mit ADODB verwendet wird:
<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>
Das obige ist der detaillierte Inhalt vonWie rufe ich UTF-8-Akzentzeichen aus Access über PDO_ODBC ab?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!