Heim >Backend-Entwicklung >PHP-Tutorial >Wie rufe ich UTF-8-Akzentzeichen aus Access über PDO_ODBC ab?

Wie rufe ich UTF-8-Akzentzeichen aus Access über PDO_ODBC ab?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-10-20 17:50:02607Durchsuche

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

UTF-8-Akzentzeichen können nicht vom Zugriff über PDO_ODBC abgerufen werden

Das Problem

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.

Unvollständige Korrekturen

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.

Die vollständige Lösung

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.

Beispielcode

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn