我有一个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');
之类的内容,但他们没有完成这项工作。
有人能指出我正确的方向吗?
答案 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