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