2013-07-12 87 views
-3

我的页面编码设置为utf8,甚至在元标记为utf8PDO和特殊字符

但是,当我从数据库中获取一个值时,它会将一个带有问号的钻石代替 - im假定不知道该字符。

这个角色是é。如果我做一个回声é;它在页面上正常显示。另外,如果我在html中手动编写它。但是,当我从使用PDO的数据库调用中获取相同的值时,我得到一个

我假设它是一个PDO设置。我试过了:

$db->exec("SET NAMES 'utf8';"); 

但是这并不能解决它。

有什么建议吗?

+2

什么是桌上的字符集?整个渲染管道必须是相同的字符集,或者至少与适当的转换逻辑链接在一起。例如浏览器 - >服务器 - > php->数据库 - >表 - >数据库 - > php->服务器 - >浏览器 –

+0

“甚至meta标签”意味着浏览器少于nothing –

+0

如果你在php 5.3.6+,你应该在dsn字符串(PDO构造函数的第一个参数)中设置字符集,比如'; charset = utf8'。 – jeroen

回答

2

很多事情都可能出错。通常你需要使用utf-8编码源文件,并使用utf-8打开数据库连接,并将数据库表定义为utf-8。

@deceze帮助我澄清事情的一篇很棒的文章是http://kunststube.net/frontback/

最明显的事情,你可以在你的情况下,尝试是:

  1. 保存与UTF8编码你的源文件。此选项存在于Notepad ++或Crimpson Editor等编辑器中。
  2. 创建utf8选项的PDO连接:

    $connection = new PDO('mysql:host='.$this->host.';dbname='.$this->db_name.';charset=utf8', $this->user, $this->pass,array(PDO::ATTR_EMULATE_PREPARES => false, PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));

  3. 确保您的表是UTF8编码,并在窗体中有选项:

    <形式行动=“action.php的“接收字符集=” utf-8" >

更新:也许函数utf8_encode能解决问题,但有一个错误的转换,从PHP到数据库的地方。或者错误的文件编码。你应该修复问题的根源,并且不再需要utf8_encode。