【发布时间】:2012-07-09 21:34:53
【问题描述】:
$dbo = new PDO("mysql:host=localhost;dbname=database", "databaseuser",
"databasepassword", array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));
$dbo -> exec("set character_set_client='utf8'");
$dbo -> exec("set character_set_results='utf8'");
$dbo -> exec("set collation_connection='utf8_general_ci'");
$prepSnapRetrieve = $dbo->prepare(
"SELECT * FROM znc_log WHERE `nick` LIKE :u AND `tstamp` BETWEEN :t1 AND :t2"
);
$prepSnapRetrieve->execute(array(':u' => str_replace("|osu","", $_GET['u']),
':t1' => $_GET['sns'], ':t2' => $_GET['sne']));
$snapshotListing = $prepSnapRetrieve->fetchAll();
echo("Snapshot of ".$_GET['u']. "'s chat on ".strftime("%e/%m/%g",$_GET['sne']));
echo("<br><br>");
foreach($snapshotListing as $chat) {
echo "<i>" . " " . "[" . strftime("%H:%M:%S", $chat['tstamp']) . "]" .
"</i> " . " ><u>" . $chat['channel'] . "</u>< " . "(<b>" .
htmlspecialchars($chat['nick'])."</b>) ".htmlspecialchars($chat['message']);
echo("<br>");
}
这个 sn-p 是代码应该解析和输出以 UTF-8 存储的 IRC 数据 - 但在回显时,任何 unicode 内容都简单地显示为:
??????
我已经查看了几个问题并包含了几个声称的修复程序,但似乎没有任何效果。另一个使用相同数据库的脚本完美地回显了 UTF-8 内容,但它使用的是 PHP 的标准 MySQL 实现,而不是 PDO。我做错了什么?
【问题讨论】:
-
您确定这不是客户端问题吗? Content-Type 标头是否正确?
-
除了来自 kgb 的提示,请看这里stackoverflow.com/questions/1566602/…。可能是一个好的开始......您的 UTF8 设置可能会在您的 PDO/exec 调用中重置
标签: php mysql unicode utf-8 pdo