PhpStorm中文乱码90%是文件真实编码与IDE读取编码不一致所致;须先用file -i或VS Code确认真实编码(勿信右下角“UTF-8”提示),再同步将File Encodings中Global、Project及Properties编码均设为UTF-8,并依情况选择Reload as或Convert to修复乱码文件。

PhpStorm打开文件中文乱码,90%不是字体或插件问题,而是文件真实编码和IDE读取编码对不上——先别改字体、别重装,直接查file -i再调File Encodings三处设置。
怎么确认文件真实编码(别信右下角显示)
PhpStorm右下角写的“UTF-8”只是猜测,尤其从Windows复制来的PHP文件,大概率是GBK,但IDE误判成UTF-8,一打开就方块或问号。
- 终端执行
file -i your_script.php,看输出里charset=后面是什么(比如charset=gbk或charset=utf-8; with bom) - 用VS Code打开同一文件,右下角明确显示“GBK”“UTF-8”或“UTF-8 with BOM”,这个比PhpStorm可信得多
- 如果显示
charset=utf-8; with bom,说明文件开头有BOM(\xEF\xBB\xBF),会导致PHP中headers already sent或json_encode()失败,必须转成UTF-8 without BOM
File Encodings三处必须同步设为UTF-8
进入File → Settings → Editor → File Encodings(macOS是PhpStorm → Preferences),以下三项缺一不可:
-
Global Encoding:设为UTF-8,影响所有新建项目默认行为 -
Project Encoding:设为UTF-8,覆盖Global,决定当前项目所有文件的读取/保存编码 -
Default encoding for properties files:也设为UTF-8,否则messages_zh_CN.properties这类资源文件必然乱码 - ⚠️
Transparent native-to-ascii conversion勾选后,.properties里的中文会自动转成\u4f60\u597d形式——这是Java生态正常机制,不是乱码,别因此误操作
已有乱码文件怎么救:Reload as vs Convert to
右下角编码提示旁有两个按钮,作用完全不同,点错会毁文件:
立即学习“PHP免费学习笔记(深入)”;
-
Reload as …:仅重新以指定编码解释当前二进制内容,不改磁盘文件。适用于你**确定文件是GBK但被当UTF-8打开了** → 点它 → 选GBK→ 看是否恢复正常 -
Convert to …:把文件内容按原编码读出,再以目标编码重写保存(会改磁盘文件)。适用于你想把GBK文件永久转成UTF-8 → 先Reload as GBK让它显示正常,再点Convert to UTF-8 - 批量处理老项目?别手动点。用终端命令:
iconv -f GBK -t UTF-8 input.php > output.php,或用PhpStorm的Code → Reformat Code(需先确保文件已正确Reload as)
控制台输出还是乱码?得联动三层环境
Console Encoding设置只控制IDE怎么解码输出字节流,不改变PHP实际输出的编码。单改它,90%白忙。
- 系统层:终端执行
locale,确保LANG含UTF-8;若为空或为C,运行export LANG=zh_CN.UTF-8并写入~/.bash_profile - JVM层:修改
bin/phpstorm.sh,在#!/bin/sh下**紧贴第一行**插入:export LANG=zh_CN.UTF-8和export LC_ALL=zh_CN.UTF-8 - PHP运行时层:脚本开头加
mb_internal_encoding('UTF-8');,并在终端执行php -r "echo mb_internal_encoding();"验证返回UTF-8
BOM、终端locale、JVM启动参数、PHP内部编码——漏掉任何一层,都可能让中文在某处突然变方块。尤其老项目混着GBK文件和UTF-8 without BOM文件时,得一个个file -i过一遍,不能只靠IDE右下角猜。


















