温馨提示×

centos apache为什么乱码

小樊
47
2026-10-03 00:25:18
栏目: 智能运维

在 CentOS 上运行 Apache 出现乱码,通常不是 Apache 本身坏了,而是字符编码配置或文件编码不一致导致的。下面按最常见原因给你梳理一下:


一、最常见原因:网页编码和服务器声明不一致

1. 页面本身不是 UTF-8

比如你写的是 GBK 文件,但浏览器按 UTF-8 解析。

检查方法:

file index.html

如果显示:

index.html: ISO-8859 text

说明不是 UTF-8。

✅ 解决:

iconv -f gbk -t utf-8 index.html > index.utf8.html
mv index.utf8.html index.html

2. Apache 没声明 UTF-8

即使文件是 UTF-8,Apache 默认可能发:

Content-Type: text/html; charset=ISO-8859-1

浏览器就会乱码。

✅ 解决(推荐):

编辑 Apache 配置:

vi /etc/httpd/conf/httpd.conf

添加或修改:

AddDefaultCharset UTF-8

然后重启:

systemctl restart httpd

3. HTML 里没写 charset

这是最容易忽略的。

✅ 在 <head> 里必须有:

<meta charset="UTF-8">

或老写法:

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

二、PHP 页面乱码(很常见)

如果是 PHP:

1. PHP 文件不是 UTF-8

用编辑器另存为 UTF-8 无 BOM

2. PHP 没设置编码

在 PHP 文件最前面加:

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

或在 php.ini:

default_charset = "UTF-8"

三、数据库乱码(MySQL / MariaDB)

如果乱码来自数据库内容:

检查数据库编码

SHOW VARIABLES LIKE 'character%';

确保是:

utf8 / utf8mb4

建库建表要指定

CREATE DATABASE test DEFAULT CHARSET utf8mb4;

四、SSH / 终端本身乱码(不是网页)

如果你是说 终端里看文件乱码:

echo $LANG

应该是:

zh_CN.UTF-8

如果不是:

localectl set-locale LANG=zh_CN.UTF-8

五、快速自查清单 ✅

  • [ ] 文件是 UTF-8(无 BOM)
  • [ ] HTML 有 <meta charset="UTF-8">
  • [ ] Apache 有 AddDefaultCharset UTF-8
  • [ ] PHP 有 header("Content-Type: text/html; charset=utf-8")
  • [ ] 数据库是 utf8mb4

如果你愿意,可以把:

  • 乱码页面截图或文字
  • file 文件名
  • Apache / PHP 版本

发给我,我可以直接帮你定位是哪一层出的问题。

0 踩