使用 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)
阿拉伯语
我有一个几年前使用 ASP.NET 编写的 Web 应用程序,它将表单数据保存到 mdb 数据库中,然后在用户选择时将其转换为 XLS 文件。
我将表单处理代码更改为 php,我注意到阿拉伯字符被转换为不同的字符集。
示例:تجربة
将存储为 تجربة
使用此 online tool.
代码如下:
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) 阿拉伯语