使用PDO从数据库中选择西里尔文本

时间:2015-01-25 20:32:11

标签: php pdo cyrillic

我在从数据库中选择西里尔文本时遇到问题。我得到一些未定义的字符而不是字母。我一整天都在互联网上搜索,但没有。

连接功能:

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;

当我从数据库中选择数据时,我会得到这样的结果: enter image description here 如您所见,西里尔文本未正确显示,但在数据库中正确显示: enter image description here

并且提到我有标题集:

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

那么这里有什么问题?

1 个答案:

答案 0 :(得分: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;
}