在 Ubuntu 下使用 Apache 出现乱码,通常不是 Apache 本身“坏了”,而是字符编码不一致导致的。下面按最常见原因 → 对应解决办法给你一套排查方案。
先判断是哪一种乱码:
编辑 Apache 配置文件:
sudo nano /etc/apache2/conf-available/charset.conf
确保有以下内容(没有就加上):
AddDefaultCharset UTF-8
启用并重启:
sudo a2enconf charset
sudo systemctl restart apache2
HTML 文件头部必须有:
<meta charset="UTF-8">
或老写法:
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
⚠️ 如果文件是 GBK 编码,但写的是 UTF-8,一定会乱码。
查看文件编码:
file -i index.html
如果是:
index.html: text/html; charset=iso-8859-1
转换为 UTF-8:
iconv -f GBK -t UTF-8 index.html > index.utf8.html
mv index.utf8.html index.html
如果你用 Options +Indexes,中文文件名乱码:
编辑虚拟主机或全局配置:
IndexOptions Charset=UTF-8
重启 Apache:
sudo systemctl restart apache2
确保 PHP 文件是 UTF-8 无 BOM
在 php.ini 中:
default_charset = "UTF-8"
或 PHP 代码中:
header("Content-Type: text/html; charset=UTF-8");
查看:
locale
如果不是 UTF-8:
sudo apt install locales
sudo dpkg-reconfigure locales
选择:
en_US.UTF-8
或
zh_CN.UTF-8
AddDefaultCharset UTF-8<meta charset="UTF-8">IndexOptions Charset=UTF-8header 或 php.ini 编码一致如果你愿意,可以把具体乱码截图 / 页面类型(静态 / PHP)/ 错误示例发出来,我可以直接帮你精准定位是哪一步的问题。