Корейские символы не отображаются при извлечении из базы данных MS Access с использованием php - PullRequest
1 голос
/ 30 января 2012

У меня есть 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 печатает загрузку символов?Если я удаляю бит Response.CodePage = 65001 из сценария ASP, он печатается так же, как PHP.

Затем я сосредоточился на поиске эквивалента PHP Response.CodePage = 65001 и нашел такие вещи, как header('Content-Type:text/html; charset=UTF-8'); и ini_set('default_charset', 'UTF-8');, но они не справились с работой.

Может кто-нибудь указать мне направильное направление?

Ответы [ 2 ]

2 голосов
/ 31 января 2012

Хорошо, я нашел решение.Я должен был установить кодировку соединения с БД следующим образом:

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

, где 65001 - это utf-8, я думаю.Не уверен, что это лучший способ, но он работает для меня!

0 голосов
/ 14 июля 2016

$ 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

...