Вопрос по unicode, php, utf-8, mysql, pdo – PHP: проблемы с выводом utf8 из базы данных MySQL с использованием PDO

3
$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>");
}

Этот фрагмент кода предназначен для синтаксического анализа и вывода данных IRC, которые были сохранены в UTF-8, но при отражении любой контент Unicode выглядит просто так:

??????

Я рассмотрел несколько вопросов и включил несколько предполагаемых исправлений, но ничего не помогло. Другой сценарий, использующий ту же базу данных, отлично отображает содержимое UTF-8, но использует стандартную реализацию MySQL PHP, а не PDO. Что я делаю неправильно?

Вы уверены, что это не проблема на стороне клиента? Правильный ли заголовок Content-Type? Sergey Eremin
Общее руководство по устранению неполадок:Handling Unicode Front To Back In A Web App deceze♦
Помимо подсказки от kgb, посмотрите здесьstackoverflow.com/questions/1566602/…, Может быть, это хорошее начало ... Ваши настройки UTF8 могут быть сброшены в ваших вызовах PDO / exec Andreas W. Wylach

Ваш Ответ

1   ответ
11

make sure the table is utf8

Use SQL-Command Show Variables; to check the MySQL character settings for the table.

inserted data is utf8

You might try tools like phpMyAdminer or Adminer to check, if the
data is inserted correctly. Try to insert data via the tool manually. When inserting via script, do not use basic string functions. Always use their mbstring alternatives. Set mb_internal_encoding( 'UTF-8' ); to let PHP handle UTF-8 internally.

fetched data is utf8

I would only use $pdo->exec("SET NAMES utf8"); and drop the rest. Because SET NAMES x is equivalent to SET character_set_client = x; SET character_set_results = x; SET character_set_connection = x;

displayed data is utf8

If this is displayed in an html page, do not forget to set the meta tag or header
"Content-Type: text/html; charset=utf-8".

Спасибо тебе за$pdo->exec("SET NAMES utf8");, Это решает мою проблему
поцарапайте это, клиент не представил данные utf8 должным образом Ephemeralis
сортировка таблицы - utf8, вставленные в нее данные - utf8, извлеченные данные - utf8, а страница, на которой она отображается, имеет как заголовок utf-8, так и метатег utf8 html, но все равно не повезло Ephemeralis

Похожие вопросы