首页 >后端开发 >php教程 >如何通过 PDO_ODBC 从 Access 中检索 UTF-8 重音字符?

如何通过 PDO_ODBC 从 Access 中检索 UTF-8 重音字符?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-10-20 17:50:02605浏览

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

无法通过 PDO_ODBC 访问检索 UTF-8 重音字符

问题

PDO_ODBC 和本机 PHP ODBC 功能返回的文本不是UTF-8 编码,无论它如何存储在 Access 数据库中。在网页中显示数据或使用其他需要 UTF-8 输入的 PHP 函数时,这可能会导致问题。

不完整的修复

解决此问题的一种方法是使用 utf8_encode()函数将返回的文本转换为 UTF-8。但是,这仅适用于 ISO-8859-1 编码的字符。对于其他编码方式编码的字符,例如 Windows-1252,此方法不起作用。

更全面的解决方案是使用 mb_convert_encoding() 函数将返回的文本转换为 UTF-8。该函数可以处理更广泛的编码,包括Windows-1252。但是,它仍然没有解决未以 Unicode 形式存储在数据库中的字符的问题。

完整修复

要完全解决该问题,带有 ADODB Connection 和 Recordset 对象的 COM 必须被使用。这些对象允许明确指定 UTF-8 代码页。通过使用 CP_UTF8 选项打开连接和记录集,从数据库检索的所有数据都将自动转换为 UTF-8,无论其存储方式如何。

示例代码

这里是演示如何使用 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>

以上是如何通过 PDO_ODBC 从 Access 中检索 UTF-8 重音字符?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn