在 Ubuntu 上 PHP 日志出现乱码,通常不是 PHP 本身的 bug,而是字符编码不一致或输出环境不支持中文导致的。常见原因和对应解决办法如下:
如果你的 PHP 文件是 GBK / GB2312,但系统或日志环境按 UTF-8 解析,就会乱码。
✅ 解决:
file -i yourfile.php
确保是:
charset=utf-8
用编辑器(VSCode / PHPStorm)把文件另存为 UTF-8 无 BOM。
PHP 默认不会自动用 UTF-8 处理字符串。
✅ 解决(在脚本开头加):
mb_internal_encoding('UTF-8');
mb_http_output('UTF-8');
比如:
cat / tail 终端是 UTF-8✅ 解决:
locale
确保:
LANG=en_US.UTF-8
LC_ALL=en_US.UTF-8
如不是:
sudo apt install locales
sudo locale-gen en_US.UTF-8
php.ini 日志编码问题PHP 错误日志一般直接写字节流,不受 PHP 字符集影响。
如果中文乱码,通常是:
error_log 内容来自 iconv / mb_convert✅ 建议:
虽然不影响日志文件,但会影响你“看到”的乱码判断。
Nginx:
charset utf-8;
Apache:
AddDefaultCharset UTF-8
即使日志是对的,你“看”的是乱码。
✅ 解决:
# 1. 文件编码
file -i index.php
# 2. 系统编码
locale
# 3. 日志文件编码
file -i /var/log/php_errors.log
# 4. 终端编码
echo $LANG
✅ PHP 文件:UTF-8 无 BOM
✅ 系统 locale:UTF-8
✅ 日志内容:直接写 UTF-8 字符串
✅ 终端工具:UTF-8
如果你愿意,可以把:
php.ini 相关配置发出来,我可以帮你精准定位是哪一层的问题。