Maison  >  Article  >  développement back-end  >  Comment récupérer les caractères accentués UTF-8 depuis Access via PDO_ODBC ?

Comment récupérer les caractères accentués UTF-8 depuis Access via PDO_ODBC ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-10-20 17:50:02518parcourir

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

Impossible de récupérer les caractères accentués UTF-8 depuis l'accès via PDO_ODBC

Le problème

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.

Corrections incomplètes

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.

Le correctif complet

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.

Exemple de code

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn