使用php从MS Access数据库中提取时不显示韩文字符

时间:2012-01-30 11:19:10

标签: php asp-classic utf-8 cjk

我有一个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脚本会打印一堆?。如果我从ASP脚本中删除Response.CodePage = 65001位,它会打印?就像PHP一样。

然后我将注意力转向找到Response.CodePage = 65001的PHP等效项,并找到header('Content-Type:text/html; charset=UTF-8');ini_set('default_charset', 'UTF-8');之类的内容,但他们没有完成这项工作。

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

2 个答案:

答案 0 :(得分:2)

好的,我找到了解决方案。我必须像这样设置数据库连接的编码:

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

我认为65001是utf-8。不确定这是否是最好的方法,但它对我有用!

答案 1 :(得分:0)

$ con = new 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