PhpStorm 中文模板乱码的根本原因是模板文件编码与 IDE 读取编码不一致,需通过 Reload from Disk、Reload as UTF-8 并 Convert to UTF-8(去除 BOM)、统一 Global/Project Encoding 为 UTF-8 等步骤系统解决。

File → Settings → Editor → File and Code Templates 中的中文乱码
文件模板(如 PHP Class、HTML5 文件等)里写的中文,在新建文件时显示为方块或问号,本质是模板文件本身保存的编码和 PhpStorm 读取时用的编码不一致。关键不是改模板内容,而是让 PhpStorm 知道“这个模板文件该用什么编码打开”。
常见错误现象:新建 PHP 类 后,类注释里的 /** @author 张三 */ 变成 /** @author ¿ */;或者 HTML 模板中 <title>首页</title> 渲染成乱码。
- 先确认模板文件真实编码:在终端执行
file -i ~/.PhpStorm*/config/fileTemplates/internal/PHP%20Class.php(Linux/macOS),看输出是否含charset=utf-8或charset=gbk - 不要直接编辑模板文件——它可能被 IDE 缓存或覆盖。正确做法是:进入
Settings → Editor → File and Code Templates,选中对应模板,点击右下角Reload from Disk按钮,强制重载 - 如果重载后仍乱码,说明模板文件磁盘上就是 GBK 编码。此时应先右键该模板 →
Open in Editor,再点编辑器右下角编码提示(如GBK),选Reload as UTF-8(仅解释),再立刻点Convert to UTF-8(重写保存) - 转换后务必检查是否引入 BOM:用
hexdump -C ~/.PhpStorm*/config/fileTemplates/internal/PHP%20Class.php | head -n1查看前 3 字节,若为ef bb bf就得删掉——BOM 会导致 PHPheaders already sent报错
自定义模板(Custom)里中文保存后不生效
自己新建的模板(比如 My API Controller)写了中文,但每次新建文件还是乱码,大概率是因为 PhpStorm 默认用 Global Encoding 去读取这些模板,而你没同步设置。
使用场景:团队共享模板、本地新增带中文注释的代码片段、从旧项目复制的模板文件。
立即学习“PHP免费学习笔记(深入)”;
-
Settings → Editor → File Encodings中,Global Encoding和Project Encoding必须都设为UTF-8——这是模板读取的底层依据 - 自定义模板文件实际存放在
~/.PhpStorm*/config/fileTemplates/下,路径含空格或特殊字符(如%20)时,IDE 可能读取失败。建议统一用英文名命名模板,中文内容留在模板体内部 - 修改完模板后,必须点
Apply再点OK,否则更改不会写入磁盘;关闭 Settings 窗口前留意右上角是否有黄色感叹号提示“unsaved changes” - 某些版本(如 2024.3+)对
.php后缀模板会额外校验 BOM。若发现模板内容正常但新建文件仍乱码,可临时把模板后缀改成.txt测试——排除文件类型识别干扰
Properties 文件模板(messages_zh_CN.properties)中文变 \u4f60\u597d
资源文件模板里写 hello=你好,新建后却变成 hello=\u4f60\u597d,这不是乱码,是 PhpStorm 开启了 Transparent native-to-ascii conversion 的正常行为。
为什么这样做:Java 生态要求 .properties 必须用 ISO-8859-1 编码,中文必须转义;但 PhpStorm 会自动双向转换——编辑时显示中文,保存时转义,读取时再还原。
- 只要你在
Settings → Editor → File Encodings中勾选了Transparent native-to-ascii conversion,且Default encoding for properties files设为UTF-8,这就是预期行为,不用干预 - 如果你确实需要原始
UTF-8无转义的 properties(比如给前端 i18n 用),就取消勾选该选项,并把Default encoding for properties files改为UTF-8,同时确保所有相关文件磁盘编码也是 UTF-8 - 注意:取消勾选后,若项目对接 Java 后端,可能引发运行时读取失败——Spring Boot 默认按 ISO-8859-1 解析 properties
改完模板编码,新文件还是乱码?检查这三点
即使模板本身已修复,新建文件仍乱码,问题常不在模板,而在上下文链路断裂。
- PHP 文件开头缺声明:模板生成的 PHP 文件若用于 Web 输出,必须包含
header('Content-Type: text/html; charset=utf-8');,否则浏览器可能按系统默认编码(如 GBK)解析 - Git 提交时编码污染:如果模板文件曾被 Windows 用户以 GBK 提交过,Git 会保留原始字节。用
git ls-files --eol查看i/c列是否一致;必要时git add --force强制重置 - IDE 启动参数未同步:某些 CentOS/Ubuntu 环境下,
phpstorm.sh启动脚本未传入-Dfile.encoding=UTF-8,导致 JVM 层读取模板时 fallback 到系统 locale(如zh_CN.GBK)。检查~/.PhpStorm*/bin/phpstorm64.vmoptions是否含该行
BOM 是最隐蔽也最常被忽略的一环——它不显示、不报错,只在 HTTP header 发送或 JSON 解析时突然冒出来。每次改完模板,顺手 head -c 3 your_template.php | xxd 看一眼,比反复重启 IDE 省半小时。


















