根本原因是终端编码与php脚本/系统locale不一致;须统一文件编码(utf-8无bom)、php.ini default_charset、phpstorm terminal与run/debug console编码、系统区域设置及jvm参数,缺一不可。

PhpStorm 控制台输出中文显示为问号或方块
根本原因是终端编码与 PHP 脚本/系统 locale 不一致,常见于 Windows 默认 GBK 环境下运行 UTF-8 编码的脚本。PhpStorm 的 Run 和 Debug 控制台共用同一终端配置,但调试时还叠加了 Xdebug 的字符处理路径,容易放大乱码问题。
- 先确认 PHP 文件本身保存为 UTF-8 无 BOM(用 Notepad++ 或 VS Code 查看编码)
- 检查
php.ini中是否设置了default_charset = "UTF-8"(非必需但建议统一) - Windows 用户重点检查系统区域设置:控制面板 → 区域 → 管理 → 更改系统区域设置 → 勾选“Beta 版:使用 Unicode UTF-8 提供全球语言支持”(重启生效)
PhpStorm 的 Terminal 和 Run/Debug Console 编码不一致
Terminal(底部标签页)和 Run/Debug 控制台是两套独立编码配置,很多人只改了其中一个,导致调试时正常、终端执行却乱码,或反之。
- Terminal 编码在
Settings → Tools → Terminal → Shell path下方的Encoding选项中设置,建议选UTF-8 - Run/Debug Console 编码在
Settings → Editor → File Encodings中修改:Global Encoding、Project Encoding、Default encoding for properties files全部设为UTF-8 - 关键一步:勾选
Transparent native-to-ascii conversion(尤其对 properties 文件),否则中文会被转成\u4f60\u597d形式输出
使用 var_dump() 或 echo 时中文被截断或错位
这不是编码问题,而是 PhpStorm 控制台对 ANSI 转义序列或宽字符(如 emoji、中文全角符号)渲染异常,尤其在启用 Xdebug 的 cli 模式下。
- 避免在调试中混用
echo和var_dump()输出大量中文结构体,优先用error_log()写入文件再查看 - 在
php.ini中临时添加xdebug.cli_color=0,关闭 Xdebug 的彩色输出,可缓解部分错位 - 若用
print_r($arr, true)拼接日志,确保接收变量的上下文也以 UTF-8 处理,例如写入文件前加mb_convert_encoding($str, 'UTF-8', 'auto')
WampServer/XAMPP 环境下调试仍乱码
本地集成环境自带的 PHP CLI 可能未继承系统 UTF-8 设置,尤其 Windows 上 WampServer 默认调用的是 c:\wamp64\bin\php\phpX.X.X\php.exe,它可能读取了旧版 php.ini 或忽略系统 locale。
- 在 PhpStorm 的
Run → Edit Configurations → PHP Script中,手动指定 CLI 解释器路径,并点击右侧…查看其关联的php.ini路径是否正确 - 运行
php -i | findstr "Loaded Configuration File"确认实际加载的php.ini,然后在该文件末尾追加:default_charset = "UTF-8" [mbstring] mbstring.language = Neutral mbstring.internal_encoding = UTF-8
- 改完后重启 PhpStorm,且务必点击
File → Invalidate Caches and Restart → Just Restart,否则缓存的编码设置可能继续生效
File Encodings 页面里三个下拉框(Global / Project / Default for properties files)没有全部同步为 UTF-8,哪怕只漏一个,var_dump() 输出的中文键名或值就可能变成乱码。php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!










