Выбор кириллического текста из базы данных с помощью PDO

У меня проблемы с выделением кириллического текста из базы данных. Я получаю некоторые неопределенные символы вместо букв. Целый день ищу в интернете, но ничего.

Функция подключения:

protected function pdo_connect(){
    $instance = new PDO('mysql:dbname='.self::SERVER_DB_DATABASE.';host='.self::SERVER_DB_HOST.';charset=utf8', self::SERVER_DB_USER, self::SERVER_DB_PASS);
    $instance->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $instance->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
    $instance->setAttribute(PDO::MYSQL_ATTR_INIT_COMMAND, 'SET NAMES utf8');
    return $instance;
}

И выбор текста из базы данных:

$temp=array();
$stmt=$this->db->query("SELECT * FROM table");
$result=$stmt->fetchAll(PDO::FETCH_ASSOC);
for($i=0; $i < count($result); $i++){ 
    $temp[$result[$i]['text_index']]['en']=$result[$i]['en'];
    $temp[$result[$i]['text_index']]['sr_lat']=$result[$i]['sr_lat'];
    $temp[$result[$i]['text_index']]['sr_cyr']=$result[$i]['sr_cyr'];
}
return $temp;

И когда я выбираю данные из базы данных, я получаю что-то вроде этого: введите здесь описание изображенияКак видите, кириллический текст отображается некорректно, но корректно отображается в базе данных: введите здесь описание изображения

И упомянуть, что у меня установлены заголовки:

header('Content-Type: text/html; charset=UTF-8');

Так в чем же проблема?


person valek    schedule 25.01.2015    source источник
comment
Посмотрите здесь stackoverflow.com/questions/ 279170/utf-8-на всем протяжении   -  person Mihai    schedule 25.01.2015
comment
@Mihai Все еще ничего. Я изменил набор символов во всех таблицах и столбцах, изменил метод подключения и набор символов в заголовке, но все равно получаю неопределенные символы.   -  person valek    schedule 25.01.2015
comment
У вас есть этот <meta charset="UTF-8"> в теге <head>?   -  person Mihai    schedule 25.01.2015
comment
@Mihai Да, я пробовал с этим и без него (в сочетании с заголовком php (кодировка)), но снова ничего.   -  person valek    schedule 25.01.2015
comment
Любые изменения, если вы удалите charset=utf8' из PDO?   -  person Mihai    schedule 26.01.2015
comment
@Mihai О ... Я только что видел, что я сделал. Я все время выполнял var_dump() на странице config.php, а не на index.php, поэтому кодировка всегда находилась под выводом. Я добавил некоторые вещи, и теперь все в порядке. Тем не менее, большое спасибо за ссылку с кодировкой utf8mb4, думаю, она мне очень поможет.   -  person valek    schedule 26.01.2015


Ответы (1)


Попробуйте исправить код подключения на:

protected function pdo_connect(){
    $instance = new PDO('mysql:dbname='.self::SERVER_DB_DATABASE.';host='.self::SERVER_DB_HOST.';charset=utf8', self::SERVER_DB_USER, self::SERVER_DB_PASS);
    $instance->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $instance->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
    $instance->setAttribute(PDO::MYSQL_ATTR_INIT_COMMAND, 'SET NAMES utf8; SET CHARACTER SET utf8; SET SESSION collation_connection = utf8_general_ci;');
    return $instance;
}
person Alex    schedule 25.01.2015
comment
Как я уже сказал в комментариях, я все равно решил свою проблему благодаря. - person valek; 26.01.2015