0

当我试图从数据库中获取汉字时,我得到了奇怪的文字。我几乎尝试了所有方法,例如html_entity_decode, htmlentities,使用 utf-8 保存文件,以 utf-8 编码,但我似乎无法正确处理。

我如何获得正确的文本?

这是我的代码:

<meta http-equiv='Content-Type' content='text/html; charset=utf-8' /> 
<?php
header('Content-Type: text/html; charset=utf-8');
$conn=odbc_connect('vocab','',''); 
$rs1=odbc_exec($conn,"SELECT MAX(ID) AS MaxId FROM vocab");
$NewMaxID=odbc_result($rs1,"MaxId");
$rand=rand(1,$NewMaxID);


            $sql="SELECT word,part_of_speech,chinese FROM vocab WHERE ID=".$rand.";";
            $rs=odbc_exec($conn,$sql);


            $i=1;
            odbc_fetch_row($rs);
$a=(odbc_result($rs,1));
$b=(odbc_result($rs,2));    
$c=(odbc_result($rs,3));


//$c="&#37806;";
//$d=html_entity_decode($c);
//$c=htmlentities($d, ENT_NOQUOTES , "UTF-8");
$rows=array("first"=>$a,"second"=>$b,"third"=>$c);
echo json_encode($rows);
?>

ps:我用的是繁体中文版的MS Office。

4

1 回答 1

0

不久前我遇到了这个问题,我可以让它工作的唯一方法是将 HTML 写入一个ADODB.Stream对象,将其保存到一个文件中,然后echo是文件:

<?php
define("TEMP_FOLDER", "C:\\__tmp\\");
header('Content-Type: text/html; charset=utf-8');

$stm = new COM("ADODB.Stream") or die("Cannot create COM object.");
$stm->Type = 2;  // adTypeText
$stm->Charset = 'utf-8';
$stm->Open();
$stm->WriteText('<html>');
$stm->WriteText('<head>');
$stm->WriteText('<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />');
$stm->WriteText('<title>ADODB test</title>');
$stm->WriteText('</head>');
$stm->WriteText('<body>');

$con = new COM("ADODB.Connection"); 
$con->Open(
        "Driver={Microsoft Access Driver (*.mdb, *.accdb)};" .
        "Dbq=C:\\Users\\Public\\Database1.accdb");
$rst = $con->Execute("SELECT word FROM vocab WHERE ID=3");
$stm->WriteText($rst->Fields("word"));
$rst->Close();
$con->Close();

$stm->WriteText('</body>');
$stm->WriteText('</html>');

$tempFile = TEMP_FOLDER . uniqid("", TRUE) . ".txt";
$stm->SaveToFile($tempFile, 2);  // adSaveCreateOverWrite
$stm->Close();
echo file_get_contents($tempFile);
unlink($tempFile);
?>
于 2013-11-11T12:14:28.783 回答