gpt4 book ai didi

php - 解决升级到 PHP 5.3 后显示 MySQL 数据库结果时不正确的字符编码

转载 作者:IT王子 更新时间:2023-10-28 23:50:00 26 4
gpt4 key购买 nike

问题描述

在我们的开发服务器上将 PHP 从 5.2 升级到 5.3 后,我们遇到了一个问题,即从我们的数据库请求并显示在网页上的数据在尝试显示俄语字符时显示编码不正确。

环境

  • 开发操作系统:Debian GNU/Linux 6.0
  • 开发 PHP:5.3.5-0.dotdeb.1
  • Live MySQL:Distrib 5.1.49

详情

在 PHP 5.3 中,与 MySQL 数据库交互的默认客户端库从 libmysql 更改为 mysqlnd ,这似乎是我们遇到问题的原因。

我们正在使用以下代码连接到数据库:

$conn = mysql_pconnect('database.hostname', 'database_user', 'database_password');
$mysql_select_db('database', $conn);

存储在我们数据库中的数据采用 UTF-8 编码进行编码。通过命令行客户端连接到数据库并运行查询可确认数据完好无损且编码正确。但是,当我们在 PHP 中查询数据库并尝试显示完全相同的数据时,就会出现乱码。在这种特定情况下,我们尝试显示俄语字符,结果是非英语、非俄语字符: garbled mess

我们收到的响应 header 确认内容类型为 UTF-8:

response headers

我们在显示前使用 mb_detect_encoding 测试了字符串在严格模式下以及 mb_check_encoding并在显示之前被告知该字符串是 UTF-8 字符串。我们还使用了mysql_client_encoding测试客户端编码,也表明字符集是UTF-8。

在进行研究时,我们发现了 some suggestions尝试解决此问题:

header("Content-type: text/html; charset=utf-8");
mysql_set_charset('utf8');
mysql_query("SET SESSION character_set_results = 'UTF8'");
mysql_query('SET NAMES UTF8', $conn);

我们甚至尝试过 utf8_encode :

utf8_encode($string);

但是,这些解决方案都不起作用。

用尽了所有选项,我们将开发系统上的 MySQL 升级到了 Distrib 5.1.55。升级后,当我们连接到我们的开发数据库时,一切都正确显示。当然,当我们连接到我们的实时数据库时,它仍然显示不正确。

理想情况下,我们希望在不升级生产服务器上的 MySQL 的情况下解决此问题,除非我们能够验证该问题无法正常工作的确切原因以及升级将解决该问题的原因。 如何在不升级 MySQL 的情况下解决此编码问题?或者,为什么 MySQL 升级可以解决问题?

最佳答案

我看到你已经试过了,但我使用的语法是:mysql_query("SET NAMES utf8")。您的语法可能是正确的,我以前从未见过这样的语法。

例子:

// connect to database stuff
$Connection = mysql_connect($server, $username, $password)
or die ("Error connecting to server");

// connect to database stuff
$db = mysql_select_db($database, $Connection)
or die ("Error selecting database");

mysql_query("SET NAMES utf8");

关于php - 解决升级到 PHP 5.3 后显示 MySQL 数据库结果时不正确的字符编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5187761/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com