cp1250_general_ci в помощь UTF-8 - PullRequest
1 голос
/ 06 июля 2010

Я извлекаю данные из внешней базы данных (я не могу ее редактировать, поэтому не советую этого делать), для которой установлено внутреннее кодирование cp1250_general_ci.

Мне нужно отобразить эти данные как UTF-8, но я не могу заставить их работать. Я использую это для получения данных:

  $dsn = 'mysql:dbname=eklient;host=127.0.0.1';
  $user = 'root';
  $password = 'root';

  try {
      $dbh = new PDO($dsn, $user, $password);
  } catch (PDOException $e) {
      $this->view->warning = 'Connection failed: ' . $e->getMessage();
  }

  $sql = 'SELECT * FROM zam z WHERE z.id_object = :id_object;';
  $sth = $dbh->prepare($sql, array(PDO::ATTR_CURSOR => PDO::CURSOR_FWDONLY));
  $sth->execute(array(':id_object' => 1));
  $data = $sth->fetchObject();

Исходная строка:

poznamka<br /> riadok1 ľščťžýáí

Когда я печатаю это так:

echo iconv('Windows-1250', 'UTF-8', $data->poznamka);

Я понял:

poznamka<br /> riadok1 ?š??žýáí

Таким образом, некоторые символы заменяются знаками вопроса. Есть идеи, как это решить?

Да, у меня есть правильные метатеги в HTML.

Ответы [ 2 ]

2 голосов
/ 06 июля 2010

Вы смотрели этот комментарий от драйвера PHP MySQL infosing:

Это способ заставить драйвер mysql PDO использовать UTF-8 для соединения:

<?php
$pdo = new PDO(
    'mysql:host=hostname;dbname=defaultDbName',
    'username',
    'password',
    array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8")
);
?>
1 голос
/ 06 июля 2010

метатеги в HTML на самом деле не имеют значения;вам нужно отправить правильный заголовок, вы можете сделать это, выполнив

<?php
header('Content-Type: text/html; charset=utf-8');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...