首页 文章

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

提问于
浏览
1

我正在将一个网站(PHP,MYSQL)更改为另一个服务器,我在Linux-Apache环境中配置它 . 问题是某些页面显示字符编码错误 . 数据作为latin1_swedish_ci存储在mysql中,涉及的php文件也在iso-8859-1中编码 . 但是,如果我进行查询,PHPMyAdmin会正确显示此数据 . HTTP标头显示“text / html; charset = iso-8859-1”,所以没有错 .

我不知道在哪里解决这个问题 . 我不知道这是一个Apache问题,还是PHP以某种方式尝试将数据读取为utf-8而不是它实际上是什么 .

这是目前“SHOW VARIABLES LIKE'%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/ | +--------------------------+----------------------------+

1 回答

  • 1

    您的数据不会存储为latin1_swedish_ci,而是存储为latin1 . 这也称为iso-8859-1;他们是一样的东西 . 瑞典部分是整理 . 这是一个常见的混淆点 .

    您与数据库的连接(至少是用于显示系统变量的数据库)设置为utf8 . 那不是latin1 .

    在 Build 与数据库的连接时,您应该立即发出此命令,无论是在php中还是在使用交互式客户端程序时 .

    SET NAMES latin1
    

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

相关问题