我将页面编码设置为utf8
,甚至在元标记中设置为utf8
.
但是,当我从数据库中获取一个值时,它会放置一个带问号的钻石——我假设不知道这个字符。
字符是é。如果我做一个回声é
;它在页面上正常显示。另外,如果我用 html 手动编写它。但是,当我使用 PDO 从数据库调用中获取相同的值时,我得到一个 ...</p>
我假设它是一个 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));
确保您的表格是 utf-8 编码的,并且您的表格具有以下选项:
<form action="action.php" accept-charset="utf-8">
更新:也许 utf8_encode 解决了您的问题,但是从 PHP 到数据库并返回的某个地方存在错误的转换。或错误的文件编码。您应该解决问题的根源,并且不再需要 utf8_encode。