我有一个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