php 文件必须使用 utf-8 无 bom 编码,因 bom 会触发“headers already sent”错误;laravel 响应默认 utf-8,无需手动设置 charset;数据库需 mysql 服务端、连接、表三处均设为 utf8mb4 才能完整支持中文和 emoji。

PHP 文件本身用什么编码?UTF-8 无 BOM 是唯一安全选择
PHP 解析器不处理文件编码声明(比如 header('Content-Type: text/html; charset=utf-8')),它只按字节读取源码。一旦文件含 BOM(Byte Order Mark),echo 或 header() 前的 BOM 就会触发「Headers already sent」错误,Laravel 的中间件、响应构造也会因此崩溃。
实操建议:
- 用 VS Code、PhpStorm 等编辑器保存时,显式选「UTF-8 without BOM」;Sublime Text 默认可能带 BOM,需手动改
- 检查现有文件是否含 BOM:终端运行
head -c 3 yourfile.php | xxd,若输出开头是ef bb bf,说明有 BOM,需重存 - Laravel 项目中所有
.php文件(包括routes/web.php、app/Http/Controllers/*.php)都必须统一为 UTF-8 无 BOM
Laravel 响应内容怎么设 UTF-8?靠框架默认,但别乱覆盖
Laravel 5.5+ 默认已将响应的字符集设为 UTF-8:Content-Type: text/html; charset=UTF-8(HTML 响应)或 application/json; charset=UTF-8(API 响应)。你不需要、也不该在每个控制器里重复调用 header() 或 response()->header()。
常见错误现象:
立即学习“PHP免费学习笔记(深入)”;
- 手动加
header('Content-Type: text/html; charset=utf-8')导致重复 header 报错 - 在 Blade 模板里写
<meta charset="gbk">锛岃










