新建php/html/js文件默认编码必须设为utf-8,否则引发乱码、json_encode返回null等问题;需同步设置project encoding和default encoding为utf-8,并提交.idea/encodings.xml到git。

新建 PHP/HTML/JS 文件默认用 GBK 或 ISO-8859-1,而不是 UTF-8,是团队协作中乱码、json_encode 返回 null、mb_strlen 计算错误的常见源头——这问题不能靠“右下角点一下改编码”解决,必须锁死新建文件的默认编码行为。
Project Encoding 和 Default encoding 必须都设为 UTF-8
很多人只改了 Project Encoding,却忽略了 Default encoding(它控制新建文件的初始编码)。两者不一致时,新创建的 .php 文件仍可能以系统默认编码(如 Windows 的 GBK)保存,后续提交 Git 就会埋雷。
-
Global Encoding设为UTF-8(影响 IDE 自身配置文件,别动) -
Project Encoding设为UTF-8(强制项目内所有文件按 UTF-8 解析) -
Default encoding for properties files保持ISO-8859-1(.properties 文件规范要求,改了会导致\u4f60\u597d解析失败) - 勾选
Transparent native-to-ascii conversion(否则.properties中的 Unicode 转义会失效)
批量转换已有文件时,“Convert to UTF-8” ≠ “Set encoding”
只点右下角「Set encoding → UTF-8」只是告诉 PhpStorm “请按 UTF-8 显示这个文件”,但磁盘上内容仍是 GBK 字节。真正要改的是字节本身,否则同事拉代码后依然乱码。
- 先右键项目根目录 →
Reload project from disk,确认 PhpStorm 检测到真实编码(如提示 “Detected encoding: GBK”) - 再右键 →
Convert Files to UTF-8(不是Set File Encoding) - 弹窗中务必勾选
Convert encoding of file content - 源编码选对(如原为 GBK 就选 GBK),否则转出来还是乱码
-
Recursively慎用:跳过vendor/、node_modules/等第三方目录,只处理src/、app/、resources/
终端、数据库、HTTP 响应头也要对齐 UTF-8
即使 PhpStorm 里全设成 UTF-8,PHP 运行时输出 header('Content-Type: text/html; charset=gb2312'),或 MySQL 连接用 SET NAMES gbk,编辑器照样会按声明的编码解析 HTML 内容,导致搜索失效、高亮错乱。
- 检查所有入口 HTML 模板,
<meta charset="utf-8">必须存在且在最前面 - PHP 中避免硬编码非 UTF-8 的
header;动态设置时确保变量值是字符串'utf-8',不是'UTF8'或'utf8' - PHPStorm 内置 Terminal 启动前,确认
LANG和LC_ALL是en_US.UTF-8或zh_CN.UTF-8(可在Settings → Tools → Terminal中设置 Shell path 前加env LANG=en_US.UTF-8) - Database tool 中连接参数加
useUnicode=true&characterEncoding=UTF-8
.idea/encodings.xml 提交到 Git 是最省心的同步方式
光靠口头约定或文档说明“大家记得设 UTF-8”,不如让 .idea/encodings.xml 自己说话。这个文件记录了 Project Encoding 和 Default encoding 的实际值,只要它在 Git 中,新成员 clone 后开 IDE 就自动生效。
- 确认该文件未被
.gitignore屏蔽(常见误配:.idea/*会吃掉它) - 提交前检查内容是否含
<option name="DEFAULT_ENCODING" value="UTF-8"></option>和<option name="IDE_ENCODING" value="UTF-8"></option> - 如果团队混用不同操作系统(Windows + macOS + Linux),
Global Encoding不必强求统一,但Project Encoding和DEFAULT_ENCODING必须一致
最容易被忽略的是:新建文件的编码行为由 Default encoding 单独控制,和当前打开的任何文件、右下角显示的编码、甚至 Project Encoding 都无直接关系。只要这个值没锁死为 UTF-8,每天都有新人在写第一行中文注释时,悄悄埋下乱码伏笔。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!










