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

时间:2015-05-05 19:24:19

标签: php asp.net ms-access character-encoding

我有几年前使用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驱动程序。

我已经搜索了几个小时的解决方案,没有运气,有什么想法吗?

提前致谢。

2 个答案:

答案 0 :(得分:1)

你的问题源于长期存在的不足之处

  • Access ODBC驱动程序(Jet和ACE)和
  • PHP ODBC机制(较旧的odbc_函数和较新的PDO_ODBC
相互交往。您无法使用Access ODBC with PHP获得对所有Unicode字符的完整和无缝支持。

在PHP下获得完整Unicode支持的唯一方法是使用COM和ADODB对象(ConnectionRecordsetStream)。这显然要求您的PHP应用程序在Windows服务器上运行。有关详细信息,请参阅我的其他答案here

答案 1 :(得分:0)

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