使用PHP从MySQL中读取时,克罗地亚字母有问题吗?

时间:2019-01-22 12:19:36

标签: php mysql mysqli character-encoding

我正在使用PHP和MySQL建立一个小型网站。

我从数据库中读取时遇到问题。我可以在数据库上执行所有操作,但是当我从数据库SELECT Č Ć Ž Đ Š时,我得到一些无效或错误表示的字符。

我得到:

  

但是在数据库中,我看到了:

  

KoristećikriminalističkupričuDostojevski je sastavio罗马kojim jepredočiosvusloženostu odnosu pojedinca premapostojećimzakonima。

问题在于克罗地亚字母:collation。我认为问题出在数据库helm list上。

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

非英语字符令人头疼,但是在过去几年中,处理它们变得更加容易。首先,请确保数据库中的varchar和text列归类设置为 utf8mb4_unicode_ci

然后,您需要确保在查询数据库时,正在使用UTF8查询它。从PHP连接到mySQL服务器之后,但在运行任何其他查询之前,运行以下查询:

SET NAMES utf8mb4;

最后,确保您要显示文本的页面也支持UTF8。如今,大多数浏览器默认使用它,但为了安全起见,请在HTML标头中设置以下标记:

<meta charset="utf-8">

如果您使用的是mysqli,下面的代码段可能会有所帮助:

# Set up the mysqli driver
$driver = new mysqli_driver();

# Report all errors
$driver->report_mode = MYSQLI_REPORT_STRICT | MYSQLI_REPORT_ERROR;

# Try connecting
try {
    $mysqli = new mysqli($_ENV['db_servername'],$_ENV['db_username'], $_ENV['db_password'], $_ENV['db_database']);
}
catch(mysqli_sql_exception $e) {
    if ($mysqli->connect_error) {
        die("[Error #{$mysqli->connect_errno}] {$mysqli->connect_error}");
    } else {
        die($e->getMessage());
    }
}

# Ensure everything is UTF8mb4
$mysqli->set_charset('utf8mb4');

# Ensure PHP and mySQL time zones are in sync
$offset = (new \DateTime())->format("P");
$mysqli->query("SET time_zone='$offset';");