温馨提示×

centos lamp为啥乱码了

小樊
43
2026-09-24 11:48:22
栏目: 智能运维

CentOS 上 LAMP(Linux + Apache + MySQL + PHP)出现乱码,通常不是某一个地方的问题,而是字符集没有统一。下面按最常见原因给你梳理一下,你对照看看是哪一种。


一、最常见原因:字符集不统一(80% 的乱码)

原则一句话:

页面、PHP、MySQL、浏览器,全部用 UTF-8

1️⃣ HTML 页面没声明编码

在 PHP 或 HTML 头部必须有:

<meta charset="UTF-8">

❌ 没有这个,浏览器会猜编码,必乱码


2️⃣ PHP 文件本身不是 UTF-8

检查你的 .php 文件编码:

  • 用编辑器(VS Code / Notepad++)看
  • 必须是 UTF-8 无 BOM

❌ ANSI / GBK 写的中文,直接乱码


3️⃣ PHP 没设置输出编码

在 PHP 最前面加:

header("Content-Type:text/html; charset=utf-8");

二、MySQL 乱码(非常常见)

1️⃣ 数据库 / 表 / 字段字符集

查看:

SHOW CREATE DATABASE 数据库名;
SHOW CREATE TABLE 表名;

如果不是 utf8mb4,就会乱码。

推荐统一为:

utf8mb4
utf8mb4_general_ci

2️⃣ PHP 连接 MySQL 没设编码(重点)

在连接后必须加:

MySQLi 示例

$mysqli->set_charset("utf8mb4");

PDO 示例

$pdo = new PDO(
  "mysql:host=localhost;dbname=test;charset=utf8mb4",
  "user",
  "pass"
);

❌ 不设,中文必乱


3️⃣ my.cnf 配置(CentOS 常见坑)

编辑:

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

三、Apache 没设编码(偶尔遇到)

vi /etc/httpd/conf/httpd.conf

加:

AddDefaultCharset UTF-8

重启:

systemctl restart httpd

四、CentOS 系统语言问题(少见但存在)

locale

如果不是:

LANG=zh_CN.UTF-8

可设置:

localectl set-locale LANG=zh_CN.UTF-8

五、快速自检清单 ✅

你可以一条条对:

  • [ ] 浏览器显示 UTF-8
  • [ ] PHP 文件是 UTF-8 无 BOM
  • [ ] HTML 有 <meta charset="UTF-8">
  • [ ] PHP 输出 header utf-8
  • [ ] MySQL 用 utf8mb4
  • [ ] 连接后 set_charset

六、如果你愿意,我可以更精准帮你

你可以直接贴:

  1. 乱码截图
  2. PHP 连接数据库代码
  3. 数据库建表 SQL
  4. 是 页面乱码 还是 数据库存进去就乱

我可以直接告诉你到底是哪一步出的问题。

0 踩