温馨提示×

ubuntu apache为啥乱码了

小樊
41
2026-10-19 19:39:51
栏目: 智能运维

在 Ubuntu 上用 Apache 出现乱码,通常不是 Apache 本身坏了,而是编码设置不一致。下面按最常见原因给你排查:


一、最常见原因:网页编码不是 UTF-8

1. 网页文件本身不是 UTF-8

检查你的 HTML / PHP 文件:

file -i index.html

如果看到:

charset=iso-8859-1

说明文件不是 UTF-8。

✅ 解决:

iconv -f GBK -t UTF-8 index.html > index.utf8.html
mv index.utf8.html index.html

(如果是 Windows 写的文件,常是 GBK)


二、HTML 没有声明编码(非常重要)

在 <head> 里必须有:

<meta charset="UTF-8">

老写法也可以:

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

⚠️ 没这一行,浏览器会“猜编码”,很容易乱码。


三、Apache 默认发送了错误编码

Apache 可能发了:

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

检查 Apache 配置

grep -R "AddDefaultCharset" /etc/apache2/

如果看到:

AddDefaultCharset ISO-8859-1

✅ 改成:

AddDefaultCharset UTF-8

然后重启:

sudo systemctl restart apache2

四、PHP 页面乱码(如果是 PHP)

在 PHP 文件最前面加:

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

并且确保 PHP 文件本身是 UTF-8(无 BOM)。


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

如果是从数据库读出来乱码:

MySQL 连接时设置

mysqli_set_charset($conn, "utf8mb4");

数据库、表、字段都要是

utf8mb4

六、浏览器问题(排查用)

  • 强制浏览器用 UTF-8:
    • Chrome:右上角 → 更多工具 → 编码 → UTF-8
  • 确认不是浏览器缓存问题(Ctrl + F5)

七、快速自检清单 ✅

✔ 文件是 UTF-8
✔ HTML 有 charset=UTF-8
✔ Apache 是 AddDefaultCharset UTF-8
✔ PHP header 正确
✔ 数据库是 utf8mb4


如果你愿意,可以把下面信息发我,我可以直接帮你定位:

  1. 是 静态网页 / PHP / 数据库?
  2. 乱码是 中文乱码 还是 全是问号 ???
  3. curl -I 你的网址 的输出

我可以直接告诉你改哪一行。

0 踩