我的页面编码设置为utf8
,甚至在元标记为utf8
。PDO和特殊字符
但是,当我从数据库中获取一个值时,它会将一个带有问号的钻石代替 - im假定不知道该字符。
这个角色是é。如果我做一个回声é
;它在页面上正常显示。另外,如果我在html中手动编写它。但是,当我从使用PDO的数据库调用中获取相同的值时,我得到一个
我假设它是一个PDO设置。我试过了:
$db->exec("SET NAMES 'utf8';");
但是这并不能解决它。
有什么建议吗?
我的页面编码设置为utf8
,甚至在元标记为utf8
。PDO和特殊字符
但是,当我从数据库中获取一个值时,它会将一个带有问号的钻石代替 - im假定不知道该字符。
这个角色是é。如果我做一个回声é
;它在页面上正常显示。另外,如果我在html中手动编写它。但是,当我从使用PDO的数据库调用中获取相同的值时,我得到一个
我假设它是一个PDO设置。我试过了:
$db->exec("SET NAMES 'utf8';");
但是这并不能解决它。
有什么建议吗?
很多事情都可能出错。通常你需要使用utf-8编码源文件,并使用utf-8打开数据库连接,并将数据库表定义为utf-8。
@deceze帮助我澄清事情的一篇很棒的文章是http://kunststube.net/frontback/。
最明显的事情,你可以在你的情况下,尝试是:
创建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));
确保您的表是UTF8编码,并在窗体中有选项:
<形式行动=“action.php的“接收字符集=” utf-8" >
更新:也许函数utf8_encode能解决问题,但有一个错误的转换,从PHP到数据库的地方。或者错误的文件编码。你应该修复问题的根源,并且不再需要utf8_encode。
什么是桌上的字符集?整个渲染管道必须是相同的字符集,或者至少与适当的转换逻辑链接在一起。例如浏览器 - >服务器 - > php->数据库 - >表 - >数据库 - > php->服务器 - >浏览器 –
“甚至meta标签”意味着浏览器少于nothing –
如果你在php 5.3.6+,你应该在dsn字符串(PDO构造函数的第一个参数)中设置字符集,比如'; charset = utf8'。 – jeroen