温馨提示×

centos php日志为何显示乱码

小樊
41
2026-09-24 08:51:17
栏目: 编程语言

在 CentOS 上 PHP 日志出现乱码,通常不是 PHP 本身的问题,而是字符编码不一致导致的。下面按常见原因逐一说明,并给出对应解决办法。


一、最常见原因:系统 / 终端编码不是 UTF-8

1. 查看当前编码

locale

如果看到:

LANG=zh_CN.GBK
LC_CTYPE=zh_CN.GBK

或 C、POSIX,就容易出现中文乱码。

2. 解决方式

设置为 UTF-8:

export LANG=zh_CN.UTF-8
export LC_ALL=zh_CN.UTF-8

永久生效(CentOS 7/8):

localectl set-locale LANG=zh_CN.UTF-8

或编辑:

vi /etc/locale.conf

内容:

LANG=zh_CN.UTF-8

二、PHP 日志本身编码不是 UTF-8

PHP 错误日志中如果包含中文(如异常信息、业务日志),但源码文件不是 UTF-8:

检查 PHP 文件编码

file -i yourfile.php

如果不是 UTF-8,用编辑器转码:

  • VS Code:右下角 → 编码 → 另存为 UTF-8
  • Linux:
iconv -f GBK -t UTF-8 old.php > new.php

三、PHP 内部未设置字符集

在 php.ini 或代码中明确指定:

php.ini

default_charset = "UTF-8"

PHP 代码

mb_internal_encoding('UTF-8');
mb_http_output('UTF-8');

四、Web 服务器(Nginx / Apache)未设置编码

Nginx

charset utf-8;

Apache

AddDefaultCharset UTF-8

五、查看日志的终端或工具编码不对

即使日志是 UTF-8,如果用:

  • SecureCRT(编码不是 UTF-8)
  • PuTTY(默认不是 UTF-8)
  • Windows 记事本打开

也会乱码。

✅ 解决:

  • 终端设置为 UTF-8
  • 用 less、vim 查看
less -r /var/log/php/php_errors.log

六、PHP error_log 写入文件时的特殊情况

如果你用:

error_log("中文错误信息");

而 PHP 运行环境是 GBK,就会乱码。

✅ 建议:

  • PHP 文件统一 UTF-8(无 BOM)
  • 日志中避免直接写中文,或先转码:
error_log(mb_convert_encoding("中文", "UTF-8", "auto"));

七、快速自检清单 ✅

检查项 命令
系统编码 locale
文件编码 file -i file.php
PHP 编码 `php -i
Web 编码 Nginx/Apache 配置
终端编码 终端设置 UTF-8

如果你愿意,可以把:

  • 乱码截图或日志内容
  • CentOS 版本
  • PHP 版本
  • 使用 Nginx 还是 Apache

发出来,我可以直接帮你定位是哪一种乱码。

0 踩