当正确显示ñ时,PHP和MYSQL无法正确显示双引号

时间:2014-06-12 16:33:52

标签: php mysql pdo character-encoding special-characters

我在将双引号插入我的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));

当我在数据库中签入时,双引号会像“而不是简单地”一样出现。西班牙语 - 插入如下:ñ。

然后要显示,我的主页在头部有这个:

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

我使用utf8_decode打印从数据库中检索到的消息。

结果是:西班牙语 - 显示正确,但双引号显示为\"而不是"

插入我的数据库或显示时我缺少什么?

2 个答案:

答案 0 :(得分:2)

  

双引号出现像“而不是简单”

您的一些代码是添加这些斜杠。或者魔术引号的古老特征被关闭。两者都应该被禁用。

  

西班牙语 - 插入如下:ñ。

当实际的init已经完成时,发送mysql init 命令是没有意义的。

SET NAMES不是一个神奇的颂歌,需要一些特殊的舞蹈来执行,而是简单而简单的SQL查询。因此,您可以通过query()方法运行它。或者,更好的是,在DSN中设置charset。

答案 1 :(得分:-1)

您应该查看表/数据库的字符集。至少在葡萄牙语中,这可能是一件令人头疼的问题