php 8.6 默认字符集设为 utf-8,需从配置层(php.ini 中 default_charset、mbstring.internal_encoding、zend.multibyte)、运行时层(php 文件保存为 utf-8 无 bom、pdo 连接指定 charset=utf8mb4)、环境层(web 服务器设置 adddefaultcharset/charset、响应头与 html meta 一致)三方面统一处理,缺一不可。

PHP 8.6 默认字符集设为 UTF-8,需从配置层、运行时层和环境层三方面统一处理。只改其中一项容易遗漏,导致中文注释、表单提交、数据库读写等环节仍出现乱码。
修改 php.ini 中的核心编码配置
这是最根本的设置,影响所有 PHP 脚本的默认行为:
- 找到 php.ini 文件(可通过
php --ini或phpinfo()确认路径) - 将以下三项明确设为 UTF-8(取消注释并赋值):
default_charset = "UTF-8"mbstring.internal_encoding = "UTF-8"zend.multibyte = On - 注意:
mbstring.encoding_translation建议设为Off,避免与框架自动转码冲突 - 修改后必须重启 Web 服务器(如 Apache/Nginx)或 PHP-FPM 进程
确保 PHP 文件自身保存为 UTF-8 无 BOM
即使配置正确,若源文件带 BOM 或保存为 GBK/ANSI,解析时仍会出错:
- 用 VS Code、PhpStorm 或 Notepad++ 打开 PHP 文件 → 编码菜单 → 选择「UTF-8 无 BOM」→ 重新保存
- 避免用 Windows 记事本直接保存,它默认添加 BOM,易引发 headers already sent 错误
- 可批量检查:在终端运行
file -i *.php(Linux/macOS),确认输出含charset=utf-8且无bom
连接数据库时强制使用 utf8mb4
MySQL/MariaDB 推荐用 utf8mb4(而非旧版 utf8),才能完整支持 emoji 和生僻汉字:
- PDO 连接时,在 DSN 中加入
;charset=utf8mb4:$pdo = new PDO("mysql:host=localhost;dbname=test;charset=utf8mb4", $user, $pass); - 或连接后立即执行:
$pdo->exec("SET NAMES utf8mb4 COLLATE utf8mb4_unicode_ci"); - 对应数据库、表、字段也需设为
utf8mb4_unicode_ci(仅改连接不改库结构仍可能截断)
Web 服务器与响应头协同生效
防止浏览器误判编码,需多层声明一致:
- Apache:在
.htaccess或虚拟主机配置中加AddDefaultCharset UTF-8 - Nginx:在 server 块中加
charset utf-8; - PHP 脚本开头(尤其非模板文件)可加:
header('Content-Type: text/html; charset=UTF-8');(注意:必须在任何输出前调用) - HTML 模板中保持
<meta charset="UTF-8">在最前面
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











