thinkphp6.1命令行中文乱码本质是windows终端编码链断裂:脚本utf-8编写→cmd默认gbk解码→显示乱码;需统一文件编码(utf-8无bom)、终端代码页(chcp 65001)、powershell输出编码([console]::outputencoding = utf8)及字体(lucida console/consolas)。

ThinkPHP6.1 在 Windows 命令行(CMD 或 PowerShell)中输出中文乱码,本质是 CLI 环境的编码链断裂:PHP 脚本用 UTF-8 编写 → Windows 终端默认按 GBK 解码 → 显示为乱码。这不是 ThinkPHP 本身的问题,而是终端、文件、PHP 运行时三者未对齐。解决关键在于统一编码路径,而非仅改 header 或数据库。
确认并保存脚本为 UTF-8 无 BOM
这是最常被忽略的第一步。Windows 记事本、部分旧编辑器默认保存为 ANSI(即 GBK),即使你写了 header('Content-Type: text/html; charset=utf-8'),它对命令行完全无效(CLI 模式下 header 不起作用)。
- 用 VS Code、Notepad++ 或 Sublime Text 打开你的 ThinkPHP 入口文件(如
public/index.php)或测试脚本 - 查看右下角状态栏编码标识,确保显示为 UTF-8(不是 UTF-8 with BOM)
- 若非 UTF-8,选择「文件 → 另存为」→ 编码选 UTF-8 → 覆盖保存
临时切换 CMD 代码页为 UTF-8
Windows CMD 默认使用代码页 936(GBK),需手动切换为 65001(UTF-8)才能正确解析 UTF-8 字节流。
- 打开 CMD,输入:
chcp 65001,回车 - 再执行 PHP 命令,例如:
php think hello或php public/index.php - 若提示“无效代码页”,说明系统未启用 UTF-8 支持:进入「设置 → 时间和语言 → 语言 → 管理语言设置 → 更改系统区域设置」→ 勾选「Beta 版:使用 Unicode UTF-8 提供全球语言支持」→ 重启电脑
PowerShell 需额外设置输出编码
PowerShell 默认不将 chcp 视为有效指令,且自身输出编码仍为系统默认,必须显式指定。
- 在 PowerShell 中运行:
[Console]::OutputEncoding = [System.Text.Encoding]::UTF8 - 为长期生效,把该行加入 PowerShell 配置文件(
$PROFILE)。先运行notepad $PROFILE,若文件不存在则新建,粘贴后保存 - 注意:ThinkPHP 的
think命令行工具依赖symfony/console,其输出会受此设置影响,设置后中文命令提示、日志、artisan 类指令均可正常显示
字体与终端兼容性检查
即使编码正确,若当前字体不支持 Unicode,仍会显示方块或空白。
- 在 CMD 或 PowerShell 窗口标题栏右键 → 「属性」→ 「字体」选项卡
- 选择 Lucida Console 或 Consolas(二者均完整支持中文 Unicode)
- 避免使用「点阵字体」或「新宋体」——它们在命令行中对 UTF-8 渲染不可靠
- 若常用 Cmder 或 Windows Terminal,可在其设置中直接指定字体和启动时执行
chcp 65001
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











