使用php从MS Access数据库中提取时不显示朝鲜语字符


Korean characters not displaying when pulled from MS Access database using php

我有一个Access DB,里面有很多韩语名字的人。我有一个经典的ASP网站,它非常愉快地从数据库中读取数据并正确地显示它。我现在正在用PHP开发一个不同的网站,但它无法显示韩语字符。我写了两个非常简单的脚本,一个用ASP,一个是用PHP来解释原因。

ASP:

<%
Response.CodePage = 65001
Set objLoginConn = Server.CreateObject("ADODB.Connection")
objLoginConn.Provider = "Microsoft.Jet.OLEDB.4.0"
objLoginConn.Open "C:'wwwroot'mydb.mdb"
Set rs = Server.CreateObject("ADODB.Recordset")
SQL = "SELECT firstname FROM mytable"
rs.Open SQL, objLoginConn, 3, 3
while not rs.EOF
    response.write("<p>"& rs.fields("firstname").value &"</p>")
    rs.movenext
wend
%>

PHP:

<?php
$con = new COM("ADODB.Connection") or die("Cannot start ADO");
$con->Open("Provider=Microsoft.Jet.OLEDB.4.0; Data Source = mydb.mdb");
$SQL = "SELECT firstname FROM mytable";
$rs = $con->execute($SQL);
while (!$rs->EOF) {
    echo "<p>".$rs->Fields("firstname")->value."</p>";
    $rs->movenext();
}
?>

ASP脚本正确打印所有名称,但PHP脚本打印的负载为?'s.如果我从ASP脚本中删除Response.CodePage = 65001位,它会打印吗?'It’就像PHP一样。

然后,我将注意力转向寻找与Response.CodePage = 65001等价的PHP,并找到了类似header('Content-Type:text/html; charset=UTF-8');ini_set('default_charset', 'UTF-8');的东西,但它们并没有完成任务。

有人能给我指正确的方向吗?

好的,我找到了一个解决方案。我不得不这样设置DB连接的编码:

$con = new COM("ADODB.Connection", NULL, 65001);

其中CCD_ 6是utf-8。不确定这是否是最好的方式,但它对我有效!

$con=新COM("ADODB.Connection",NULL,CP_UTF8);

也会起作用。

COM::__construct ( string $module_name [, mixed $server_name [, int $codepage [, string $typelib ]]] )
$module_name = "ADODB.Connection"
$server_name = NULL (using default, localmachine)
$codepage = CP_UTF8

参见http://php.net/manual/en/class.com.php