在 Ubuntu 上配置 PHP 出现乱码,通常不是 PHP 本身“坏了”,而是字符编码不一致导致的。下面按常见原因逐个说明,并给出解决办法。
乱码本质是:写入编码 ≠ 读取编码 ≠ 显示编码
常见涉及环节:
PHP 文件必须是 UTF-8 无 BOM
错误示例:
用编辑器(VS Code / PHPStorm)确认:
文件 → 编码 → UTF-8
VS Code 右下角可看到编码
header("Content-Type:text/html;charset=utf-8");
或
ini_set('default_charset', 'utf-8');
⚠️ 注意:
header() 必须在 任何输出之前echo、空格、HTML即使 PHP 对了,HTML 也要写:
<meta charset="UTF-8">
完整示例:
<?php
header("Content-Type:text/html;charset=utf-8");
?>
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>测试</title>
</head>
<body>
中文测试
</body>
</html>
确保是:
utf8mb4
查看:
SHOW CREATE DATABASE 数据库名;
SHOW CREATE TABLE 表名;
$conn = new mysqli("localhost","user","pass","db");
$conn->set_charset("utf8mb4");
$dsn = "mysql:host=localhost;dbname=db;charset=utf8mb4";
查看:
locale
如果不是 UTF-8:
sudo locale-gen zh_CN.UTF-8
sudo update-locale LANG=zh_CN.UTF-8
AddDefaultCharset UTF-8
charset utf-8;
header("Content-Type:text/html;charset=utf-8")<meta charset="UTF-8">utf8mb4你可以告诉我:
我可以直接帮你定位是哪一步出的问题。