温馨提示×

ubuntu php日志为何乱码

小樊
36
2026-10-15 05:52:46
栏目: 编程语言

在 Ubuntu 上 PHP 日志出现乱码,通常不是 PHP 本身“坏了”,而是字符编码不一致或输出环境不支持中文/特殊字符导致的。下面按常见原因给你梳理:


一、最常见原因:编码不一致(90% 情况)

1. PHP 文件本身不是 UTF-8

如果 PHP 文件保存为 GBK / ANSI,但系统/终端按 UTF-8 解析,就会乱码。

✅ 解决:

file -i your_script.php

如果不是 utf-8,用编辑器(VS Code / PHPStorm)转成 UTF-8 无 BOM。


2. PHP 未设置字符编码

header('Content-Type: text/html; charset=utf-8');

CLI 模式下没用,但 Web 日志 / 页面输出 会受影响。


二、日志文件编码问题(非常常见)

1. 日志文件本身是 GBK

Ubuntu 默认是 UTF-8,如果你用 echo 写中文到日志:

error_log("中文测试");

但日志文件原来是 GBK 创建的,就会乱码。

✅ 解决:

iconv -f gbk -t utf-8 /var/log/php_errors.log

或者清空日志重新生成:

> /var/log/php_errors.log

三、终端 / SSH 客户端编码不对

1. 终端不是 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

SSH 工具(Xshell / PuTTY)也要设置为 UTF-8。


四、PHP error_log 写中文乱码(CLI)

CLI 模式:

php test.php

如果直接 echo 中文乱码:

echo "中文";

✅ 解决:

export LANG=en_US.UTF-8

五、Web 服务器(Nginx / Apache)环境问题

Nginx

确保:

charset utf-8;

Apache

AddDefaultCharset UTF-8

六、PHP 内置函数输出乱码(mb_*)

如果你用了 substr(不是 mb_substr):

substr("中文", 0, 1); // 乱码

✅ 正确:

mb_substr("中文", 0, 1, "UTF-8");

七、快速自检清单 ✅

你可以按顺序检查:

  1. PHP 文件是否是 UTF-8 ✅
  2. Ubuntu locale 是否是 UTF-8 ✅
  3. 日志文件是否是 UTF-8 ✅
  4. SSH / 终端是否是 UTF-8 ✅
  5. Web 服务器是否设置 UTF-8 ✅

八、你可以贴出来我帮你精准判断

如果你愿意,可以把下面信息发我:

  • PHP 运行方式(CLI / FPM / Apache)
  • 日志示例(乱码截图或文本)
  • locale 输出
  • php -i | grep -i error

我可以直接告诉你是哪一层出的问题。

0 踩