Php 为什么外来字符以一种时髦的方式保存到MySQL服务器?

Php 为什么外来字符以一种时髦的方式保存到MySQL服务器?,php,mysql,database,unicode,localization,Php,Mysql,Database,Unicode,Localization,我将以下内容发送到我的PHP页面,然后调用我的MySQL服务器: ethan•test•again 但出于某种原因,它会保存到数据库中,如下所示: ethan•test•again 下面是我的PHP页面中的部分代码,显示了如何保存数据: if(mysql_query("CALL InsertTitle ( '".mysql_real_escape_string(urldecode($_POST['title']))."' )")) $result = mysql_query("

我将以下内容发送到我的PHP页面,然后调用我的MySQL服务器:

ethan•test•again
但出于某种原因,它会保存到数据库中,如下所示:

ethan•test•again
下面是我的PHP页面中的部分代码,显示了如何保存数据:

if(mysql_query("CALL InsertTitle
(
  '".mysql_real_escape_string(urldecode($_POST['title']))."'
)"))
$result = mysql_query("SELECT title FROM item WHERE id = '".mysql_real_escape_string($_GET['id'])."'");

print "<?xml version=\"1.0\" encoding=\"UTF-8\"?><rss version=\"2.0\"><channel><title>Titles</title>";

while ($row = mysql_fetch_array($result,MYSQL_ASSOC)) 
{
  echo "<title>".$row{'title'}."</title>";
}
有趣的是,当我调用MySQL服务器通过另一个PHP页面显示数据时,它看起来很好。实际上,一切都很好,正如我所期望的那样。下面是一些从数据中提取的部分代码示例:

if(mysql_query("CALL InsertTitle
(
  '".mysql_real_escape_string(urldecode($_POST['title']))."'
)"))
$result = mysql_query("SELECT title FROM item WHERE id = '".mysql_real_escape_string($_GET['id'])."'");

print "<?xml version=\"1.0\" encoding=\"UTF-8\"?><rss version=\"2.0\"><channel><title>Titles</title>";

while ($row = mysql_fetch_array($result,MYSQL_ASSOC)) 
{
  echo "<title>".$row{'title'}."</title>";
}

为什么在我的MySQL服务器中它看起来如此时髦?我做错了什么吗?

在字符串表字段中使用
utf8\u general\u ci
排序规则,并添加
mysql\u查询(“设置名称'utf8'”)连接到DB。

< P>结束<强>和< /强>结束看起来很好,它在中间。我感觉只是显示器不支持角色。你在哪里查看数据库?如果它的控制台或phpmyadmin,我认为它不会正确显示,即使它保存在utf8中。

看起来你没有使用UTF-8端到端(这里有一个提示:)。我认为你也不需要使用urldecode…看在上帝的份上,请使用
mysql\u real\u escape\u string
而不是
str\u replace
构造。@deceze:别担心,str\u replace无论如何都是空操作。注射攻击在这个“安全”系统中甚至没有什么可担心的。@mattball:那么UTF8不是什么目的呢?数据库?我发誓我在安装时就把它设置成了这样。看我昨天写的这篇文章:非常棒的文章。谢谢