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

Php PDO utf8_在INSERT中对我的文本字符串进行两次编码?,php,unicode,pdo,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中获取输入文本,将其放

相关代码:

$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Ã402;¼rkçe Türkçe Türkçe!”
”,该值为双utf8ƒ编码

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


据我所知,我没有对数据进行编码,因为它是由PDO准备的。

编码是一个b*tch。您需要确保它在几个地方都与您期望的一样:

  • 包含Javascript的HTML页面。使用如下元标记将其设置为utf-8:

  • 连接到您的数据库。连接到数据库后(以及任何其他查询之前),执行查询
    设置名称“utf8”

  • 您的数据库字段。在MySQL中,它被称为排序规则,将其设置为
    utf8\u general\u ci
    (ci代表不区分大小写)

  • 如果您有这3个数据,那么您的数据应该始终是utf-8(除非您自己进行编码)


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

    适当注明。如果gedit用unicode保存,我会做4中的2,3,实际上可能是这样。我一直不确定utf8\u general\u ci与utf8\u bin或其他一些变体是什么…
    utf8\u bin
    使数据显式二进制。我不知道PERC,但它可能会让你不能再做文本搜索或类似的事情。我从不使用任何二进制排序规则。也许其他人可以给你一些启发。我自己最近才发现:utf8_general_bin使搜索对重音标记敏感(soé不同于e),但utf8_general_ci使搜索不敏感。我明白了。我确实知道关于ut8的事;这使您的字段区分大小写。