PHP文件用记事本打开乱码或空白是因编码不匹配:UTF-8(无BOM)文件被记事本误作ANSI解析;应改用VS Code等支持编码识别的编辑器,并按官方要求统一保存为UTF-8无BOM。

PHP 文件用记事本打开全是乱码或空白
这是典型的文件编码不匹配问题:PHP 文件实际是 UTF-8(无 BOM)或 GBK 编码,而 Windows 记事本默认用 ANSI(即当前系统区域的本地编码,如中文 Windows 是 GBK)打开 UTF-8 文件时,若不含 BOM 就会显示为乱码或空内容。
实操建议:
- 别用系统记事本直接打开 PHP 文件——它对 UTF-8 无 BOM 支持极差,且无法手动指定编码
- 改用 VS Code、PhpStorm、Notepad++ 等编辑器,它们能自动识别 UTF-8、UTF-8-BOM、GBK,并提供「以编码重新打开」功能
- 在 VS Code 中右下角点击编码标识(如
UTF-8),选择Reopen with Encoding→GBK或UTF-8快速验证 - 若确认是 GBK 编码的 PHP 文件,但部署到 Linux 服务器后报错(如
Parse error: syntax error, unexpected end of file),大概率因 PHP 解析器默认按 UTF-8 读取,遇到 GBK 的中文注释/字符串就解析中断
如何检查 PHP 文件真实编码
不能只看编辑器右下角显示,要靠命令行或工具验证。Linux/macOS 下用 file -i filename.php 最可靠;Windows 下可用 PowerShell 命令:
Get-Content -Path "test.php" -Encoding Byte | Select-Object -First 3
查看前 3 字节:
立即学习“PHP免费学习笔记(深入)”;
-
0xEF 0xBB 0xBF→ UTF-8 with BOM -
0xFF 0xFE或0xFE 0xFF→ UTF-16(小端/大端) - 其他常见字节组合(如
0xC4 0xE3)→ 大概率是 GBK(对应中文“我”)
注意:iconv -f UTF-8 -t UTF-8//IGNORE test.php 若报错或输出为空,也暗示原始编码不是 UTF-8。
PHP 文件该用什么编码保存
PHP 官方文档明确要求:源文件应使用 **UTF-8 无 BOM** 编码。BOM(Byte Order Mark)虽不影响语法,但一旦存在, 前的 \xEF\xBB\xBF 会被当成输出,导致 Cannot modify header information 类错误。
关键操作:
- 在 VS Code 中:右下角点击编码 →
Save with Encoding→ 选UTF-8(不是UTF-8 with BOM) - 在 Notepad++ 中:菜单栏
编码 → 转为 UTF-8 无 BOM 格式 - 如果文件含中文变量名或注释,确保 Web 服务器返回的
Content-Type头带; charset=utf-8,否则浏览器可能误判编码 - PHP 内部处理字符串时(如
mb_strlen($str, 'UTF-8')),编码必须与文件实际一致,否则长度计算、截取都会出错
批量转换 PHP 文件编码(Linux/macOS)
项目里混着 GBK 和 UTF-8 文件时,不能逐个改,要用脚本批量处理。核心原则:先备份,再转换,最后验证。
推荐命令(将当前目录下所有 .php 文件转为 UTF-8 无 BOM):
find . -name "*.php" -exec iconv -f GBK -t UTF-8 {} \; -exec sed -i '1s/^\xEF\xBB\xBF//' {} \;说明:
-
iconv -f GBK -t UTF-8假设原编码是 GBK;若不确定,先用file -i抽样检查 -
sed -i '1s/^\xEF\xBB\xBF//'删除可能残留的 UTF-8 BOM(iconv有时会带上) - 执行前务必
cp -r ./src ./src_backup,因为iconv遇到无法转换的字符会报错并中断,可能导致文件损坏 - 转换后运行
php -l *.php检查语法,再用浏览器访问关键页面,确认中文显示和表单提交正常
BOM 和编码不一致的问题,往往在跨平台协作或老项目迁移时集中爆发,修复重点不在“怎么改”,而在“改完是否真生效”——得从文件存储、Web 服务响应、PHP 解析、浏览器渲染四个环节串起来验证。











