Ubuntu下 PHPStorm 编码问题排查与解决
一 在 PHPStorm 内统一编码设置
- 打开设置:依次点击 File → Settings → Editor → File Encodings(macOS 为 Preferences)。将以下三项统一设为 UTF-8:
- Global Encoding
- Project Encoding
- Default encoding for properties files
- 对于已打开的文件,右键编辑器标签或文件内容 → File Properties → File Encoding,选择 UTF-8;若看到“Reload/Convert”提示,先 Reload 确认内容不乱码,再 Convert 保存。
- 建议勾选 Transparent native-to-ascii conversion(用于 properties 文件),避免中文转义。
- 字体显示异常(中文方块/空白)时,前往 File → Settings → Editor → Font,选择支持中文的字体,如 Noto Sans CJK SC、Source Han Sans SC、WenQuanYi Micro Hei、或 Microsoft YaHei,并重启 IDE 生效。
二 修复现有文件的编码与 BOM 问题
- 在 PHPStorm 中直接转换:右键文件 → File Encoding → Convert to UTF-8(或先 Reload 为正确编码后再保存为 UTF-8)。
- 批量或无图形界面时,使用 iconv 转换(先备份):
- 转换并另存:
iconv -f GBK -t UTF-8 old.php > new.php
- 直接覆盖(谨慎):
iconv -f GBK -t UTF-8 old.php -o old.php
- 忽略无法转换字符:
iconv -f GBK -t UTF-8//IGNORE old.php > new.php
- PHP 文件建议保存为 UTF-8 无 BOM,避免某些场景下产生输出前置空白或解析问题。
三 全链路统一为 UTF-8(避免“编辑器正常、浏览器/接口乱码”)
- PHP 运行时:在 php.ini 设置
default_charset = "UTF-8"
- Web 服务器:
- Apache:
AddDefaultCharset UTF-8
- Nginx:
charset utf-8;
- 输出层:
- PHP 脚本:
header('Content-Type: text/html; charset=UTF-8');
- HTML:
<meta charset="UTF-8">
- 数据库(以 MySQL 为例):
- 库/表/字段使用 utf8mb4
- 连接时显式指定字符集:
- MySQLi:
$conn->set_charset("utf8mb4");
- PDO:
new PDO($dsn, $user, $pass, ['charset' => 'utf8mb4']);
- 原则:代码、服务器、数据库、HTTP 响应、HTML 均统一为 UTF-8。
四 Ubuntu 与 Java 字体导致的界面中文显示问题
- 若菜单/提示中文为方块,多为 Java 字体缺失或不支持中文:
- 安装中文字体(示例):
sudo apt-get install fonts-noto-cjk fonts-wqy-zenhei
- 重启 PHPStorm;如仍异常,可在 File → Settings → Appearance & Behavior → Appearance 中取消 Override default fonts by (not recommended),或将界面字体设置为 Noto Sans CJK SC/WenQuanYi Micro Hei 等中文字体。
五 快速排查清单
- 当前文件编码是否为 UTF-8(文件右键 → Properties)。
- IDE 三项编码(Global/Project/Properties)是否为 UTF-8。
- 输出是否正确声明 charset=UTF-8(HTTP 头与 HTML meta)。
- 数据库与连接字符集是否为 utf8mb4。
- 终端/控制台运行脚本时,环境变量 LANG/LC_CTYPE 是否为 zh_CN.UTF-8 或 en_US.UTF-8。
- 历史文件是否含 BOM 或混合编码(用 PHPStorm 或 iconv 统一转换)。