关于php:在LAMP堆栈中编码UTF-8和ISO-8859-1之间的问题

Encoding problems between UTF-8 and ISO-8859-1 in LAMP stack

我正在将一个网站(php,mysql)更改为另一个服务器,并在Linux-Apache环境中对其进行配置。问题是有些页面显示字符编码错误。数据以拉丁语-瑞典语-ci的形式存储在mysql中,涉及的php文件也以iso-8859-1编码。但是,如果我进行查询,phpmyadmin会正确显示此数据。HTTP头显示"text/html;charset=iso-8859-1",所以没有什么问题。

我不知道该去哪里解决这个问题。我不知道这是不是Apache的问题,还是PHP试图将数据读取为UTF-8而不是真正的UTF-8。

这是"显示变量,如"%char%";的当前输出。

+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | latin1 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+


您的数据不是以拉丁语-瑞典语-ci存储的,而是以拉丁语1存储的。这也被称为ISO-8859-1;它们是相同的东西。瑞典部分是校勘。这是一个常见的困惑点。

与数据库的连接(至少是用于显示系统变量的连接)设置为utf8。那不是拉丁裔。

当您建立到数据库的连接时,应该立即用PHP和使用交互式客户机程序发出这个命令。

1
SET NAMES latin1

您可以在这里阅读:https://dev.mysql.com/doc/refman/5.6/en/charset-connection.html