我有一个包含阿拉伯语或波斯语字符的访问(.mdb)文件。
我需要在php中使用它,或者将它导入MySQL。
但它显示了????而不是utf8字。
这是我的代码:

$conn = new COM("ADODB.Connection") or die("Cannot start ADO");
$db_connstr = "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=".realpath("test.mdb")." ; DefaultDir=".realpath("");
$conn->open($db_connstr);
$conn2 = mysql_connect($dbhost, $dbuser, $dbpass) or die ('Error connecting to mysql');
//mysql_query("set names 'utf8'");
mysql_select_db($dbname);
$rs = $conn->Execute("SELECT name FROM test");
while (!$rs->EOF)
{
    $name = $rs->Fields("name");
    //echo utf8_encode ( $name );
    mysql_query("INSERT INTO test (id,name) VALUES (NULL,'".$name."') ");
    $rs->MoveNext();
}
$rs->Close();

然后我使用frommysql_query("set names 'utf8'")utf8_encode ( $name )
但不工作!
有人能帮我吗?
谢谢。

最佳答案

可能,您的阿拉伯字符存储在MS Access的CP-1256中。在写入数据库之前,需要将它们转换为utf8。我使用了PDO而不是你不推荐的mysql_*函数。输入用户名、密码和数据库名称:

<?php
$conn = new COM("ADODB.Connection") or die("Cannot start ADO");
$db_connstr = "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=".realpath("test.mdb")." ; DefaultDir=".realpath("");
$conn->open($db_connstr);

try {
    //connect to mysql
    $username = 'user';
    $password = 'secret';
    $db_name = 'test';
    $mysql_conn = new PDO('mysql:host=localhost;dbname='.$db_name, $username, $password);
    $mysql_conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $mysql_conn->exec("SET NAMES 'utf8'");

    //prepare MySQL insert statement
    $stmt = $mysql_conn->prepare('INSERT INTO `test` SET value=:value');

    $rs = $conn->Execute("SELECT name FROM test");
    while (!$rs->EOF)
    {
        $name = $rs->Fields("name");
        //convert from cp1256 to uft8
        $name = iconv('cp1256', 'utf-8', $name);
        //insert into MySQL
        $stmt->execute(array("value" => $name));
        $rs->MoveNext();
    }
    $rs->Close();
} catch(PDOException $e) {
      echo 'ERROR: ' . $e->getMessage();
}

关于php - 如何用PHP显示MDB( Access )文件字段(包括utf8(阿拉伯波斯语)字符)?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17063599/

10-11 22:36
查看更多