PHP PDO数据库错误特殊字符


PHP PDO Database Error Special Characters

我已经阅读了关于这种情况的大多数问答,但我无法解决我的字符问题。我的数据库的默认字符集是utf8,所有表的排序规则是utf8_general_ci。我确信所有的设置都是utf8和utf8_general_ci,因为我已经检查了数十亿次了。问题是,在表单中发布值后,它似乎不像我在数据库中想要的,而且如果我从phpmyadmin编辑数据库,当我获取数据时,它也不会显示我想要的。

DB连接是有效的,我像前面提到的那样编辑了它,但我的脚本在字符指定方面有缺陷。。

DB连接代码为:

try {
$db = new PDO("mysql:host={$db_server};dbname={$db_name};charset=utf-8", $db_user, $db_password,array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
// exc 
}

如果你能帮助,我会很高兴

问候

对于那些有同样错误的人,即使你也确信@zerkms提到的事情:

"你需要有相同的编码:1)页面/表单2)表和列(如果有的话)字符集(而不是排序规则)3)数据库连接。就是这样。如果你有三个相同的utf-8,那么它应该可以工作。如果没有,你就缺了一些东西,需要重新检查它们中的每一个"

如果你仍然像我一样有问题,请检查你的表单流程数据,如果有你忘记的过滤器。为了安全起见,我有一个过滤器,它可以净化输入,而且只用于ansi编码,所以检查一下所有内容,一切都会好起来的。

感谢所有回复的人。

:)在工具链中的某个位置,有东西没有使用utf8。PHPMyAdmin在这类问题上是众所周知的,但我在这方面无法为您提供太多帮助,因为我更喜欢使用命令行或脚本来处理数据库。如果除了phpMyadmin之外,其他地方的输出都很好,我可以参考这篇文章,它提供了很多与phpMyadmin相关的技巧。

哦,你可以在对PDO:的提示调用中指定utf-8编码

$con = new PDO('mysql:host=' . $server . ';dbname=' . $db . ';charset=UTF8', $user, $pass, array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));

在设置MysqL时,你能做的最基本的有用的事情是将其添加到你的/etc/my.cnf文件中:

[mysqld]
default-character-set=utf8
default-collation=utf8_general_ci
character-set-server=utf8
collation-server=utf8_general_ci
init-connect='SET NAMES utf8'
[client]
default-character-set=utf8

编辑们也可以捉弄你。某些编辑器如果配置不正确,可能会在不正确的编码中切换和重新保存,从而在utf-8中重新打开时导致文本混乱。所有像样的IDE和编辑器都可以配置为处理UTF-8。

希望这能有所帮助,祝你好运。

您将连接对象的字符集设置为utf-8,这很好,数据库中的其他设置应该不会有任何影响。

我会检查您的页面(插入的页面和显示的页面)是否都正确编码。有两件事需要检查:检查页面是否存储了UTF-8编码(没有BOM),这是编辑器/ide的工作。然后检查您是否使用以下内容正确声明:

<meta http-equiv="content-type" content="text/html; charset=UTF-8" />

当然,如果您已经从错误编码的页面向数据库中插入了数据,那么数据库中的数据是无效的,无法在正确编码的页面上正确显示。