1

注意これは MS Access 2000 で、この PHP ファイルは ajax 呼び出しで呼び出されます...

このPHPファイルの最初に私が入れた

ini_set('default_charset', 'utf-8');

以下の $token はこれらの行からのものです

$search_string = $_GET[ 'search_string' ];
$search_tokens = explode( " ", $search_string );
$token = $search_tokens[ 0 ];

フランス語のアクセント記号のない「トークン」がある場合、これは問題なく機能します。

$sql="SELECT * FROM tblFrEng WHERE French = '$token'";
echo "=== SQL is $sql<br>";
$sth = $dbh->prepare( $sql );
$sth->execute();

しかし、 「référé」のようなフランス語の単語を含むSQLは問題ないように見えますが (次のように):

=== SQL is SELECT * FROM tblFrEng WHERE French = 'référé'

残念ながら、クエリは0行を返します...返すべきレコードがあっても...したがって、文字エンコーディングが問題である可能性が高いと思われます

NB utf8_encode を使用してエンコードも試みましたが、指摘されたように、これは意味がなく、SQL 文字列が文字化けしました...

4

1 に答える 1

0

これは私が作業したPHPコードです。mb_convert_encoding()PHP の "Multibyte String" ("mbstring") 拡張機能の一部であるを使用する必要がありました。

コード:

<?php
// NB: save this PHP script as an ANSI text file, not a UTF-8 encoded file

$dbh = new PDO(
        'odbc:Driver={Microsoft Access Driver (*.mdb)};' .
        'Dbq=C:\\Users\\Public\\acc2000.mdb;' .
        'Uid=Admin;Pwd=;');

// this is our test case
$city = 'Montréal';
echo '$city: ' . $city . "\r\n";

// this is the UTF-8 "token" we'd get from the AJAX call...
$token = utf8_encode($city);
echo '$token: ' . $token . "\r\n";

// ...and here we convert to the Access_2000 character set
$win_token = mb_convert_encoding($token, 'Windows-1252', 'UTF-8');
echo '$win_token: ' . $win_token . "\r\n";

$sth = $dbh->prepare('SELECT * FROM Cities WHERE City = ?');
$sth->Execute(array($win_token));
$rst = $sth->fetchAll();
echo '$rst: ';
print_r($rst);

Windows コマンド ラインから実行した場合の結果:

C:\__tmp>\php\php odbcTest.php
$city: MontrΘal
$token: Montréal
$win_token: MontrΘal
$rst: Array
(
    [0] => Array
        (
            [City] => MontrΘal
            [0] => MontrΘal
        )

)

コマンドライン出力自体は少し文字化けしていますが、少なくとも SQL クエリは結果を返したことに注意してください....

于 2013-04-26T15:08:28.540 に答える