【问题标题】:Charset UTF-8 and php header() not working字符集 UTF-8 和 php header() 不起作用
【发布时间】:2016-01-03 05:47:05
【问题描述】:

我的网站上的字符集有一些问题。我无法让 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

知道它可能是什么吗?

【问题讨论】:

    标签: php html utf-8 character-encoding


    【解决方案1】:
    • 在任何输出到浏览器之前设置 PHP header 标记(正如 JJ Cantillon 所指出的)

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

    您需要做的是通过选择

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

    排序规则 = '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

    【讨论】:

    • 很高兴知道,我还没有创建插入系统,但这肯定会让我领先于未来的问题:)
    【解决方案2】:

    经过大量搜索,我发现了以下question. 在数据库连接中,我必须指定我想要 UTF-8 字符集。我是这样做的:

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

    一定是来自主机的服务器更新导致了问题,因为我之前没有受到问题的影响。

    【讨论】:

    • 你实际上想要utf8mb4而不是MySQL中的标准utf8。
    【解决方案3】:

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

    尝试在您的第一个 HTML 标记之前设置标题。例如:

    <?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>
    

    【讨论】:

    • 我通过更改数据库连接中的字符集解决了这个问题。肯定有主机更新,因为它之前没有影响网站。
    • 嗯,有道理。很高兴听到你解决了。
    猜你喜欢
    • 2012-08-29
    • 1970-01-01
    • 2012-06-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-26
    • 1970-01-01
    • 2015-08-06
    • 1970-01-01
    相关资源
    最近更新 更多