1

Тема: Проблема с кодировкой. Перепробовал всё :(

Использую PDO +  PHP  версии 5.2.1, MySQL версии 5.0.45-community-nt:

Вот как создаю БД и таблицу:

CREATE DATABASE `out_portal` DEFAULT CHARACTER SET cp1251 COLLATE cp1251_general_ci;


CREATE TABLE `news` (
  `id` int(11) NOT NULL auto_increment,
  `user_id` int(11) NOT NULL,
  `name` varchar(256) NOT NULL,
  `created` varchar(10) NOT NULL,
  `title` varchar(256) character set cp1251 NOT NULL,
  `msg` text  character set cp1251 NOT NULL,
  `timestamp` varchar(256) NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=cp1251 AUTO_INCREMENT=1 ;

Код PHP:

$encoding='cp1251';

      // ...................................//

        Header("Content-type:text/html;charset=windows-1251");

     // .................................//

   
    try {
        $dsn = "mysql:host=$host;port=$port;dbname=$db;charset=$encoding;";
        $dbh =  new PDO($dsn, $user, $pass, array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES $encoding"));
        $dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES, TRUE);
        $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        $dbh->exec("SET NAMES $encoding");
        $dbh->exec("SET CHARACTER SET $encoding");
    } catch (PDOException $e) {
        echo 'Ошибка доступа к базе данных: '.$e->getMessage().'<br>';
        echo 'Проверьте настройки и попытайтесь заново.';
        exit;
    }
   // Как видите все возможные и невозможные варианты решение я перебрал sad

Мета-тэг тоже присутствует:

<META http-equiv="Content-Type" content="text/html; charset=windows-1251" />

Проблема вроде стандартная, вставляются данные в таблицу, затем идёт корявое отображение русских символов, аля ?????????,
как я понимаю это кодировка cp1252 (она же latin1). Но  вот понять почему данные после всех этих шаманств выводятся по прежнему в
latin1 я никак не способен.

P.S.

mysql> show variables like 'char%';
+--------------------------+----------------------------------+
| Variable_name            | Value                            |
+--------------------------+----------------------------------+
| character_set_client     | cp1251                           |
| character_set_connection | cp1251                           |
| character_set_database   | cp1251                           |
| character_set_filesystem | binary                           |
| character_set_results    | cp1251                           |
| character_set_server     | cp1251                           |
| character_set_system     | utf8                             |
| character_sets_dir       | /usr/local/share/mysql/charsets/ |
+--------------------------+----------------------------------+

P.P.S.

Причем если загонять данные через phpMyAdmin, то всё работает как надо :-/
=> Решение проблемы есть, но вот каким образом?!

2

Re: Проблема с кодировкой. Перепробовал всё :(

Дело было вот в чём, входные данные перед записью обрабатывались функцией htmlentities(), вот именно из за нее и возникали эти косяки.

3

Re: Проблема с кодировкой. Перепробовал всё :(

Revares
Спасибо, что отписали о решении проблемы.

Только одно замечание: при просмотре кодировки соединения следует смотреть ее глобальное значение, которое и использует MySQL сервер при работе со скриптами, если эта кодировка не указана прямо через SET NAMES...

SHOW GLOBAL VARIABLES LIKE 'char%';