PHP - 尽管一切都应该正确,但UTF8显示不正确

时间:2012-12-16 19:11:51

标签: php utf-8

我的网站上存在UTF8问题,我无法解决(也不了解)。 我用的时候......

$mysqli->set_charset('utf8');

...在我的网站空间上,然后特殊字符显示不正确。当我删除此功能时,将正确显示数据库查询中的所有特殊字符。在我的本地系统上它是相反的(没有set_charset('utf8')字符没有以适当的方式显示)

我还制作了一个测试脚本,看看这是否是我的webhost的问题。我的网站空间和本地测试工作正确。

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<?php
$db = new mysqli( bla bla );
$db->set_charset('utf8');
$sql  = "SELECT pages_title
         FROM pages
         WHERE pages_title = 'Günstige Tablet PCs'";
$result = $db->prepare( $sql );
$result->execute();
$result->bind_result( $title );
$result->store_result();
$result->fetch();
$result->free_result(); 

echo "Title: ". $title;

现在我已经没有问题所在的想法了。一切都正确:

  1. 数据库本身设置为utf8-general-ci
  2. 文件格式为UTF8。
  3. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />已设置。
  4. 因为测试脚本运行正常,问题应该在我的代码中,但我不知道是什么原因导致错误,因为我没有用utf8_encode / decode或类似的东西做任何事情。

    任何想法?谢谢!

3 个答案:

答案 0 :(得分:2)

您可能会遇到BOM的问题。尝试将整个代码复制/粘贴到另一个文本编辑器,并将其保存为“没有BOM的Unicode”(比如Notepad ++)。

答案 1 :(得分:1)

试试这个,应该解决它。

<?php header('Content-Type: text/html; charset=UTF-8'); ?>

答案 2 :(得分:0)

您必须发送正确的标题:

header('Content-Type: text/html; charset=utf-8');

默认情况下发送的标头取决于服务器(例如:apache)配置 - 这可能会在不同环境中造成混淆。