PDO_ODBC et les fonctionnalités natives de PHP ODBC renvoient du texte qui n'est pas Encodé en UTF-8, quelle que soit la manière dont il est stocké dans la base de données Access. Cela peut entraîner des problèmes lors de l'affichage des données dans des pages Web ou de l'utilisation d'autres fonctions PHP qui attendent une entrée UTF-8.
Une approche pour résoudre ce problème consiste à utiliser utf8_encode() fonction pour convertir le texte renvoyé en UTF-8. Cependant, cela ne fonctionne que pour les caractères codés en ISO-8859-1. Pour les caractères codés dans d'autres encodages, tels que Windows-1252, cette méthode ne fonctionnera pas.
Une solution plus complète consiste à utiliser la fonction mb_convert_encoding() pour convertir le texte renvoyé en UTF-8. Cette fonction peut gérer une plus large gamme d'encodages, y compris Windows-1252. Cependant, il ne résout toujours pas le problème des caractères qui ne sont pas stockés dans la base de données au format Unicode.
Pour résoudre complètement le problème, COM avec les objets Connexion ADODB et Recordset doit être utilisé. Ces objets permettent la spécification explicite de la page de codes UTF-8. En ouvrant la connexion et le jeu d'enregistrements avec l'option CP_UTF8, toutes les données récupérées de la base de données seront automatiquement converties en UTF-8, quelle que soit la manière dont elles sont stockées.
Voici un exemple d'extrait de code qui montre comment utiliser le correctif complet avec 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>
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!