2017-07-30 63 views
-2

前段时间,我建立了一个网站,使用mysqli访问数据库与用户信息。这个数据库包含一些西里尔语文本。PDO,获取编码错误

Yesteday我用PDO替换了mysqli。现在所有的西里尔看起来像这样:

Ð'икÑ,орDNÐ'Ðμлочкина

我有UTF8编码无处不在。这里是我的代码:

$pdo = new PDO('mysql:host=mysql.host.com;dbname=db;charset=utf8', 
'database', 'password'); 
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
$pdo->exec("set names utf8"); 
return $pdo; 

和页面

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 

可能是什么原因呢?

我GOOGLE了很多,但找不到解决方案。

+0

确保数据库是UTF -8以及,这可以帮助:https://stackoverflow.com/questions/1049728/how-do-i-see-what-c​​haracter-set-a-mysql-database-table-column-is – Keloo

+0

你也可以能够[尝试此]与PDO(https://stackoverflow.com/a/45265242/7644018)。 –

+1

[在Web应用程序中处理Unicode前后](http://kunststube.net/frontback/) – deceze

回答

0

PDO构造函数调用的最后一个参数是驱动程序特定的选项,作为具有key =>值对的数组给出。 MySQL驱动程序有一个PDO::MYSQL_ATTR_INIT_COMMAND选项,您可以在其中指定每次连接到数据库时执行的命令。

您可以使用MySQL特定的查询SET NAMES utf8作为init命令的值,来告诉MySQL使用UTF-8作为我们连接的字符集:

$pdo = new PDO('mysql:host=mysql.host.com;dbname=db;array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"', 
'database', 'password'); 
+0

好的谢谢你的指示..我加Description.is就够了? –