Charset UTF-8和php header()无效

时间:2015-10-06 10:33:36

标签: php html html5 utf-8 character-encoding

我的网站上有charset的问题。我不能让UTF-8字符集工作,我得到 而不是Å。是的,我在网上搜索了答案,我已经使用了以下代码:

<!DOCTYPE HTML>
<head>
    <?php header('Content-type: text/html; charset=utf-8'); ?>
    <meta http-equiv="Content-Type" content="text/html" charset=utf-8" />
    <title><?php echo $db_title; ?></title>
</head>
<body>
    Some content with letters æøå
</body>
</html>

数据库使用latin1_swedish_ci

知道它可能是什么吗?

3 个答案:

答案 0 :(得分:1)

  • 在向浏览器输出任何内容之前设置PHP header标记(正如JJ Cantillon所指出的)

  • 虽然PHP和HTML使用正确的UTF-8,但值得注意的是MySQL使用简化版的UTF-8,因此在选择数据库表/字段的排序时,“utf8_general_ci”(及类似) ) 完整字符集,因此您要显示的字符将无法正确存储。

您需要做的是确保MySQL通过选择

来使用完整的UTF-8字符集
  

Collat​​ion ='utf8mb4'

此外,当您将脚本连接到数据库时,您需要为PHP / MySQL通信指定相同的(utf8mb4)字符集 - 所以设置类似(就MySQLi或PDO等而言)

new PDO('mysql:host=localhost;charset=utf8mb4')  

或MySQLi阅读http://php.net/manual/en/mysqli.set-charset.php

如果您将数据存储在SQL中utf8mb4但仅使用标准MySQL-utf8(3字节而不是4字节)传输数据,那么字符集将在传输中被搞砸。

阅读:https://stackoverflow.com/a/16893103/3536236

答案 1 :(得分:0)

在输出任何html之前,您需要设置标题。

尝试在第一个HTML标记之前设置标题。 EG:

<?php header('Content-type: text/html; charset=utf-8'); ?>
<!DOCTYPE HTML>
<head>
    <meta http-equiv="Content-Type" content="text/html" charset=utf-8" />
    <title><?php echo $db_title; ?></title>
</head>
<body>
    Some content with letters æøå
</body>
</html>

答案 2 :(得分:0)

经过大量搜索后,我遇到了以下question.在数据库连接中,我必须指定我想要UTF-8字符集。我是通过以下方式做到的:

$db = new PDO('mysql:host=localhost;dbname=NAME;charset=utf8', 'USERNAME', 'PASSWORD');

它必定是导致问题的主机的服务器更新,因为我之前没有受到此问题的影响。