【发布时间】:2014-08-03 01:58:02
【问题描述】:
在我的 mysql 数据库中插入双引号时遇到问题。
我必须将标题更改为 UTF8,因为我将显示西班牙语(ñ,重音符号)。
我运行一个页面 (PHP) 在我的数据库中插入一条消息:
header('Content-Type: text/html; charset=utf-8');
$newMessage = $_POST['newChatMessage'];
$currentUser = $_SESSION['mundialUser'];
$currentUserId = $_SESSION['idPlayer'];
$newMessage = $_POST['newChatMessage'];
date_default_timezone_set('America/New_York');
$messageDate = date( "Y-m-d H:i:s", time());
$chatMessageQuery = "INSERT INTO chat (message, user, user_id, date) values (:message, :user, :user_id, :date)";
$con->setAttribute(PDO::MYSQL_ATTR_INIT_COMMAND, "SET NAMES 'utf8'");
$chatMessage = $con->prepare($chatMessageQuery);
$chatMessage->execute(array(':message'=>$newMessage, ':user'=>$currentUser, ':user_id'=>$currentUserId, ':date'=>$messageDate));
当我检查数据库时,双引号会像 \" 而不是简单的 "。西班牙语 ñ 插入如下:ñ。
然后显示,我的主页在 Head 中有这个:
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
然后我使用 utf8_decode 打印从数据库中检索到的消息。
结果是:西班牙语 ñ 显示正确,但双引号显示为 \" 而不是 "
插入数据库或显示时我遗漏了什么?
【问题讨论】:
-
在执行“SET NAMES 'utf8'”时,您可以尝试不简单引用“utf8”吗?你也可以检查你的文件编码是 UTF-8 吗?
-
同样的事情。 ñ 没关系,“出来\”
-
一个不好的解决方案是在你的 utf8_decode 周围添加一个带斜杠,但这很难看。我可以看到你没有清理你的 $_SESSION 和 $_POST 数据,也许 $_POST 值在添加到你的数据库之前很糟糕......你的 apache 是否禁用了 magic_quote_gpc?
-
magic_quote_gpc 似乎已开启
-
ow,所以如果可以,请将其设置为 OFF。 magic_quote_gpc 将“神奇地”在所有 $_GET、$_POST 和 $_COOKIE 数据(gpc = Get、Post、Cookie)的引号前添加一个反斜杠。现在这是不推荐使用的用法。如果不能,唯一的处理方法是使用 stripslashes PHP 函数从反斜杠中清除所有 $_GET、$_POST 或 $_COOKIE 数据。如果您删除了 mqgpc,请不要忘记重新启动您的 apache。
标签: php mysql pdo character-encoding special-characters