Maison  >  Article  >  développement back-end  >  Comment gérer la récupération de caractères accentués UTF-8 à partir de la base de données Access via PDO ODBC ?

Comment gérer la récupération de caractères accentués UTF-8 à partir de la base de données Access via PDO ODBC ?

DDD
DDDoriginal
2024-10-20 17:53:31475parcourir

How to Handle UTF-8 Accented Character Retrieval from Access Database via PDO ODBC?

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



Arrière-plan< /h2>

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.

Le problème avec PDO_ODBC

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.

Corrections incomplètes

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.

La solution complète à l'aide d'ADODB

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!

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