PDO utf8在INSERT中对我的文本字符串进行两次编码?

时间:2011-06-20 20:25:05

标签: php unicode pdo

相关代码:

$status = $db->run(
    "INSERT INTO user_wall (accountID, fromID, text, datetime) VALUES (:toID, :fromID, :text, '" . time() . "')",
    array(":toID" => $toID, ":fromID" => %accountID, ":text" => $text)
);

我从javascript中获取输入文本,将其抛入AJAX调用来处理它,它调用包含这些代码行的函数。

相关文字字符串为:“Türkçe Türkçe Türkçe!

在调查数据库时,以下值保存为“Türkçe Türkçe Türkçe!”,这是双utf8_encode'd。

通过从数据库中选择文本来查看文本时,我得到“Türkçe Türkçe Türkçe!”,这就是他们首先应该保存在数据库中的方式。

据我所知,我不是在编写PDO准备的数据......

1 个答案:

答案 0 :(得分:4)

编码是b * tch。你需要确保它在你想要的地方有几个地方:

  1. 带有Javascript的HTML页面。使用元标记将其设置为utf-8,如: <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

  2. 与数据库的连接。在连接到数据库之后(以及在任何其他查询之前)执行查询set names 'utf8'

  3. 您的数据库字段。在MySQL中,它被称为 collat​​ion ,将其设置为utf8_general_ci(ci代表不区分大小写)。

  4. 如果您有这3个数据,那么您的数据应该始终是,并且保持utf-8(除非您自己编码)。

    为了更好地衡量,请确保您的源代码文件也是utf-8。 Windows通常默认为iso。