根本原因是文件编码、HTTP响应头、HTML声明三者不一致;统一使用UTF-8(无BOM)编码保存PHP文件,PHP中用header('Content-Type: text/html; charset=utf-8')声明,HTML中添加即可解决。

Dreamweaver 写 PHP 时中文乱码,根本原因不是 DW 本身,而是文件编码、HTTP 响应头、HTML 声明三者不一致。只要统一用 UTF-8(无 BOM),基本能解决 95% 的情况。
确认并保存 PHP 文件为 UTF-8 无 BOM
Dreamweaver 默认可能用系统编码(如 GBK)保存文件,PHP 脚本里输出中文就会变成乱码。必须手动改保存编码:
- 打开 PHP 文件 → 文件 → 另存为 → 点击右下角 编码 下拉菜单
- 选择
UTF-8(注意:不是UTF-8 with BOM,BOM 会导致 header 已发送错误) - 勾选 “显示隐藏字符”,检查开头没有
这类不可见字符(即 BOM) - 如果已有乱码文件,建议全选复制内容 → 新建空白文件 → 设编码为 UTF-8 → 粘贴保存
PHP 中设置正确的 Content-Type 响应头
即使文件是 UTF-8,PHP 默认不声明字符集,浏览器可能按 ISO-8859-1 解析,导致中文显示为方块或问号:
- 在 PHP 输出任何 HTML 之前(即
后立即),加这行:header('Content-Type: text/html; charset=utf-8'); - 如果用了
session_start()或setcookie(),header()必须在它们之前,否则报Warning: Cannot modify header information - 避免在 PHP 开始前有空格、空行或 UTF-8 BOM —— 它们都会触发“headers already sent”错误
HTML 页面中补全 meta charset 声明
仅靠 PHP header 不够,前端渲染也依赖 告诉浏览器怎么解码 HTML 内容:
立即学习“PHP免费学习笔记(深入)”;
- 在
内顶部加入:(HTML5 写法,简洁可靠) - 不要写成
,冗余且易出错 - 确保这个
是中第一个标签,前面不能有注释或空格 - 如果页面含表单提交,还要给
加上accept-charset="utf-8",否则 POST 中文可能被转成乱码
最常被忽略的是:PHP 文件本身编码 + header() + 三者必须严格一致;任意一个掉链子,比如文件存成了 GBK 却声明 UTF-8,或者 header 漏了而只靠 meta,乱码就一定会回来。











