CentOS 上 LAMP(Linux + Apache + MySQL + PHP)出现乱码,通常不是某一个地方的问题,而是字符集没有统一。下面按最常见原因给你梳理一下,你对照看看是哪一种。
原则一句话:
页面、PHP、MySQL、浏览器,全部用 UTF-8
在 PHP 或 HTML 头部必须有:
<meta charset="UTF-8">
❌ 没有这个,浏览器会猜编码,必乱码
检查你的 .php 文件编码:
❌ ANSI / GBK 写的中文,直接乱码
在 PHP 最前面加:
header("Content-Type:text/html; charset=utf-8");
查看:
SHOW CREATE DATABASE 数据库名;
SHOW CREATE TABLE 表名;
如果不是 utf8mb4,就会乱码。
推荐统一为:
utf8mb4
utf8mb4_general_ci
在连接后必须加:
$mysqli->set_charset("utf8mb4");
$pdo = new PDO(
"mysql:host=localhost;dbname=test;charset=utf8mb4",
"user",
"pass"
);
❌ 不设,中文必乱
编辑:
vi /etc/my.cnf
加上:
[mysqld]
character-set-server=utf8mb4
collation-server=utf8mb4_general_ci
[client]
default-character-set=utf8mb4
[mysql]
default-character-set=utf8mb4
重启 MySQL:
systemctl restart mysqld
vi /etc/httpd/conf/httpd.conf
加:
AddDefaultCharset UTF-8
重启:
systemctl restart httpd
locale
如果不是:
LANG=zh_CN.UTF-8
可设置:
localectl set-locale LANG=zh_CN.UTF-8
你可以一条条对:
<meta charset="UTF-8">header utf-8utf8mb4set_charset你可以直接贴:
我可以直接告诉你到底是哪一步出的问题。