使用 php 插入 mdb 数据库时出现奇怪的字符集

Weird charset when inserting into mdb database using php

我有一个几年前使用 ASP.NET 编写的 Web 应用程序,它将表单数据保存到 mdb 数据库中,然后在用户选择时将其转换为 XLS 文件。

我将表单处理代码更改为 php,我注意到阿拉伯字符被转换为不同的字符集。

示例:تجربة 将存储为 تجربة 使用此 online tool.

将其粘贴到 UTF8 编码字段时,我可以将其转换回阿拉伯语

代码如下:

ini_set('default_charset', 'utf-8');
header('Content-Type: text/html;charset=utf-8');
$dbName = "DB\DB.mdb";
if (!file_exists($dbName)) {
    die("Could not find database file.");
}

$connection = odbc_connect("Driver={Microsoft Access Driver (*.mdb)};Dbq=$dbName", "", "");
odbc_exec($connection , "SET NAMES 'UTF8'");
odbc_exec($connection , "SET client_encoding='UTF-8'");

$stmt="INSERT INTO arabic_table (val) VALUES('".$_POST["arabicTxT"]."')"; 
$resultset=odbc_exec($connection,$stmt);

请注意: 我使用记事本将所有文件转换为 utf-8。 我通过在存储它们之前“回显”它们来测试阿拉伯语输入,并且它们位于正确的字符集中。 ASP 确实完美地存储了阿拉伯字符。 我的共享主机中没有任何 PDO 驱动程序。

我已经搜索了几个小时的解决方案,但没有找到任何想法?

提前致谢。

你的问题源于长期存在的方法上的不足

  • Access ODBC 驱动程序(Jet 和 ACE),以及
  • PHP ODBC 机制(旧的 odbc_ 函数和较新的 PDO_ODBC 函数)

互相打交道。您根本无法通过 PHP.

使用 Access ODBC 获得对所有 Unicode 字符的完整无缝支持

在 PHP 下获得完全 Unicode 支持的唯一方法是使用 COM and ADODB objects (Connection, Recordset, and Stream). This obviously requires that your PHP application be running on a Windows server. For more details see my other answer

$encoded=iconv ("CP1257","UTF-8",$string) 阿拉伯语