PHP / MS Access进行字符编码难题

注意:这是MS Access 2000,并且使用ajax调用来调用此PHP文件。

在这个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行…即使有记录它也应该返回…所以在我看来字符编码一定是问题所在

注意我也尝试使用utf8_encode进行编码,但是正如所指出的那样,这毫无意义,并且使SQL字符串乱码…

回答:

这是我正在使用的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查询返回了结果…。

以上是 PHP / MS Access进行字符编码难题 的全部内容, 来源链接: utcz.com/qa/414872.html

回到顶部