php中文乱码主因是未显式声明响应编码,须在任何输出前用header('content-type: text/html; charset=utf-8')设置,且文件须为utf-8无bom格式,数据库连接、html meta、传输工具及终端编码也需统一为utf-8。

PHP 输出中文乱码,90% 是因为没显式声明响应编码,header() 必须在任何输出前调用,且需匹配脚本实际保存的编码(通常是 UTF-8)。
PHP 中设置 header 编码的正确写法
核心就一句:header('Content-Type: text/html; charset=utf-8');,但它有硬性前提:
- 必须在
echo、print、HTML 内容、甚至空白行/空格之前执行 - 不能在
session_start()或ob_start()之后才补——它们本身会触发 headers 已发送警告 - 如果用了
require/include,要确认被包含文件开头没有 BOM 或多余空格 - PHP 文件自身必须以 UTF-8 无 BOM 格式保存(用 VS Code、Notepad++ 等编辑器检查并转存)
为什么只设 header 还是乱码?检查这三点
设了 header() 仍乱码,大概率是底层不一致:
- 数据库连接未指定字符集:MySQL 需在
mysqli_set_charset($conn, 'utf8mb4')或 PDO DSN 中加;charset=utf8mb4 - HTML meta 标签和 header 冲突:比如
header设了utf-8,但页面里写了<meta charset="gbk">锛屾祻瑙堝櫒浼氫紭鍏堜俊 meta - IDE 鎴











