本文目录导读:

在 PHP 中设置编码(字符集)主要有以下几种常见场景和方法:
PHP 文件本身的编码
保存文件时设置
- 使用 UTF-8 without BOM(无 BOM 的 UTF-8)
- 大部分 IDE/编辑器都可以设置:VSCode、PHPStorm、Sublime 等
PHP 输出编码设置
使用 header() 函数
// 设置 HTML 输出为 UTF-8
header('Content-Type: text/html; charset=utf-8');
// 或更完整的写法
header('Content-Type: text/html; charset=utf-8', true);
在 HTML 中设置 meta 标签
echo '<meta charset="utf-8">'; // 或 echo '<meta http-equiv="Content-Type" content="text/html; charset=utf-8">';
修改 php.ini 配置文件
default_charset = "utf-8"
数据库连接编码设置
MySQLi 示例
$mysqli = new mysqli("localhost", "user", "password", "database");
$mysqli->set_charset("utf8mb4"); // 推荐使用 utf8mb4
PDO 示例
$pdo = new PDO("mysql:host=localhost;dbname=database;charset=utf8mb4", "user", "password");
// 或
$pdo->exec("SET NAMES 'utf8mb4'");
JSON 编码设置
// 确保 JSON 输出 UTF-8
header('Content-Type: application/json; charset=utf-8');
echo json_encode($data, JSON_UNESCAPED_UNICODE); // 避免中文被转义
多字节字符串函数
使用 mb_* 系列函数处理多字节编码:
mb_internal_encoding("UTF-8"); // 设置内部编码
mb_http_output("UTF-8"); // 设置 HTTP 输出编码
完整示例
<?php
// 1. 设置 PHP 内部编码
mb_internal_encoding("UTF-8");
// 2. 设置 HTTP 头部
header('Content-Type: text/html; charset=utf-8');
// 3. 数据库连接
$db = new mysqli("localhost", "user", "pass", "dbname");
$db->set_charset("utf8mb4");
// 4. 输出内容
echo "中文测试";
?>
常见问题排查
如果出现乱码,请检查:
- 文件编码:PHP 文件是否保存为 UTF-8
- HTML 声明:是否设置了 charset
- 数据库:数据库、表、字段编码是否统一
- HTTP 头:是否有冲突的编码声明
- BOM 头:避免使用带 BOM 的 UTF-8
选择 UTF-8(尤其是 utf8mb4)作为统一的编码方案,可以解决大部分编码问题。