在 Ubuntu 上 PHP 日志出现乱码,通常不是 PHP 本身“坏了”,而是字符编码不一致或输出环境编码不匹配造成的。常见原因和解决办法如下:
GBK / ISO-8859-1✅ 解决:
locale
如果不是 UTF-8,可设置:
export LANG=en_US.UTF-8
export LC_ALL=en_US.UTF-8
PHP 默认不一定用 UTF-8。
✅ 在 php.ini 或代码中设置:
default_charset = "UTF-8"
或在 PHP 代码开头:
mb_internal_encoding('UTF-8');
如果你把中文直接 error_log() 或 file_put_contents():
error_log("中文测试");
而系统 locale 不是 UTF-8,就会乱码。
✅ 解决:
error_log(mb_convert_encoding("中文测试", "UTF-8"));
Web 服务器日志(access.log、error.log)乱码:
✅ 确保:
sudo locale-gen en_US.UTF-8
sudo update-locale
PHP-FPM 可能不会继承 shell 的 locale。
✅ 在 www.conf 中加:
env[LANG] = en_US.UTF-8
env[LC_ALL] = en_US.UTF-8
然后重启:
sudo systemctl restart php-fpm
记事本可能误判编码。
✅ 用以下工具:
less / catfile -i logfile# 1. 查看系统编码
locale
# 2. 查看 PHP 编码
php -i | grep charset
# 3. 查看日志文件真实编码
file -i /var/log/php_errors.log
Ubuntu PHP 日志乱码,90% 是“系统 locale 不是 UTF-8”或“写入/查看编码不一致”。
如果你愿意,可以贴一下:
locale 输出我可以帮你精确判断是哪一种情况。