在 Ubuntu 上运行 PHP 出现乱码,通常不是 PHP 本身的问题,而是字符编码不一致导致的。下面按常见原因给你系统梳理一下。
乱码本质:写进去的编码 ≠ 读出来的编码 ≠ 浏览器显示的编码
如果你的 PHP 文件是 GBK / GB2312,但服务器按 UTF-8 解析,就会乱码。
✅ 解决:
file -i yourfile.php
PHP 默认不告诉浏览器用什么编码。
✅ 在 PHP 最前面加:
header("Content-Type: text/html; charset=utf-8");
⚠️ 必须在任何输出之前(包括空格、换行)
即使 PHP 对了,HTML 也要声明。
✅ 在 <head> 中:
<meta charset="UTF-8">
例如:
utf8mb4utf8latin1✅ 解决步骤:
SHOW VARIABLES LIKE 'character_set%';
MySQLi:
$mysqli->set_charset("utf8mb4");
PDO:
new PDO(
"mysql:host=localhost;dbname=test;charset=utf8mb4",
$user, $pass
);
utf8mb4utf8mb4utf8mb4如果你是在 Ubuntu 终端运行 PHP 脚本乱码:
php test.php
✅ 检查终端编码:
locale
应该是:
LANG=en_US.UTF-8
LC_ALL=en_US.UTF-8
如果不是:
sudo apt install locales
sudo dpkg-reconfigure locales
charset utf-8;
AddDefaultCharset UTF-8
如果 PHP 文件带 UTF-8 BOM,可能出现:
✅ 解决:
header("Content-Type: text/html; charset=utf-8")<meta charset="UTF-8">如果你愿意,可以把:
发出来,我可以直接帮你定位是哪一步出的问题。