米扑代理,在LAMP架构下部署没有中文乱码,在LNMP架构下搭建部署的却出现了中文乱码。起初以为是Nginx字符配置的问题,尝试了各种方法:

1. 将nginx中charset设为 utf-8

http {
    include             mime.types;
    default_type        application/octet-stream;
    charset             utf-8;
	...

    server {
        listen       	80;
        server_name  	proxy.mimvp.com;
        charset         utf-8,gbk;
		...
	}
	...
}

2. 将CentOS字符集改为zh_cn.utf-8

vim   /etc/sysconfig/i18n

LANG="en_US.UTF-8"
SYSFONT="latarcyrheb-sun16"

修改为

LANG="zh_CN.UTF-8"   
SYSFONT="latarcyrheb-sun16"  
SUPPORTED="zh_CN.UTF-8:zh_CN:zh" 

 

3. php文件保存为utf-8格式

4. 在php文件头添加
<meta http-equiv='Content-Type' content='text/html; charset=utf-8' /> 

 

最后,调试代理,把问题定位到MySQL数据库连接字符串的问题!

解决方案:

第一种:

PDO::__construct( $dsn, $user, $pass, array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'utf8'; ") ); 

第二种:PDO::__construct($dsn, $user, $pass); 

PDO::exec(" set names 'utf8'; ");           推荐

第三种:$pdo->query(" set names 'utf8'; ");      推荐

第四种:$pdo->exec(set character set utf8 ");