Lors de l'accès à une base de données Access à l'aide de PDO_ODBC, des caractères non standard peuvent renvoyer des valeurs incorrectes. Cet article explore le problème sous-jacent et fournit une solution complète en utilisant COM avec les objets ADODB Connection et Recordset.
PDO_ODBC ne gère pas nativement UTF. -8 encodage pour le texte récupéré d'une base de données Access. Cela provoque une inadéquation entre le codage des caractères réel et celui assumé par le navigateur ou PHP. En conséquence, les caractères non standard sont tronqués ou affichés de manière incorrecte.
Certaines tentatives pour résoudre le problème impliquent la conversion du texte renvoyé en UTF- 8 en utilisant des fonctions comme utf8_encode() ou mb_convert_encoding(). Bien que ceux-ci puissent résoudre des problèmes avec certains jeux de caractères comme Windows-1252, ils ne résolvent pas entièrement le problème pour tous les caractères Unicode.
Pour une prise en charge complète de l'UTF-8, il est recommandé d'utiliser COM avec les objets ADODB Connection et Recordset. Voici comment mettre en œuvre cette solution :
<code class="php">// Connect to the database using ADODB with UTF-8 encoding $con = new COM("ADODB.Connection", NULL, CP_UTF8); $con->Open($connStr); // Open a Recordset and execute the query $rst = new COM("ADODB.Recordset"); $sql = "SELECT Team FROM Teams"; $rst->Open($sql, $con, 3, 3); // adOpenStatic, adLockOptimistic // Iterate through the Recordset and retrieve the characters while (!$rst->EOF) { $s = $rst->Fields("Team"); echo $s . "<br/>\n"; $rst->MoveNext(); } // Close the Recordset and connection $rst->Close(); $con->Close();</code>
En utilisant cette approche, tous les caractères seront correctement codés au format UTF-8 et affichés correctement.
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!