温馨提示×

ubuntu php配置为何乱码

小樊
38
2026-10-10 07:39:03
栏目: 编程语言

在 Ubuntu 上配置 PHP 出现乱码,通常不是 PHP 本身“坏了”,而是字符编码不一致导致的。下面按常见原因逐个说明,并给出解决办法。


一、最常见原因:编码不一致

乱码本质是:写入编码 ≠ 读取编码 ≠ 显示编码

常见涉及环节:

  • PHP 文件本身编码
  • PHP 输出编码
  • MySQL 编码
  • 浏览器编码

二、PHP 文件本身编码问题(非常重要)

✅ 正确做法

PHP 文件必须是 UTF-8 无 BOM

错误示例:

  • GBK
  • UTF-8 带 BOM(会导致 header 报错 + 乱码)

解决方法

用编辑器(VS Code / PHPStorm)确认:

文件 → 编码 → UTF-8

VS Code 右下角可看到编码


三、PHP 输出未声明 UTF-8(最常见)

✅ 必须在输出前设置

header("Content-Type:text/html;charset=utf-8");

或

ini_set('default_charset', 'utf-8');

⚠️ 注意:

  • header() 必须在 任何输出之前
  • 包括 echo、空格、HTML

四、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>

五、MySQL 数据库乱码(非常常见)

1️⃣ 数据库、表、字段编码

确保是:

utf8mb4

查看:

SHOW CREATE DATABASE 数据库名;
SHOW CREATE TABLE 表名;

2️⃣ PHP 连接 MySQL 必须指定编码

MySQLi

$conn = new mysqli("localhost","user","pass","db");
$conn->set_charset("utf8mb4");

PDO

$dsn = "mysql:host=localhost;dbname=db;charset=utf8mb4";

六、Ubuntu 系统语言环境(少见但存在)

查看:

locale

如果不是 UTF-8:

sudo locale-gen zh_CN.UTF-8
sudo update-locale LANG=zh_CN.UTF-8

七、Apache / Nginx 配置(可选但推荐)

Apache

AddDefaultCharset UTF-8

Nginx

charset utf-8;

八、快速自检清单 ✅

  • [ ] PHP 文件是 UTF-8 无 BOM
  • [ ] header("Content-Type:text/html;charset=utf-8")
  • [ ] HTML 有 <meta charset="UTF-8">
  • [ ] MySQL 使用 utf8mb4
  • [ ] 数据库连接设置 charset

九、如果你愿意,我可以更精确帮你

你可以告诉我:

  1. 用的是 Apache 还是 Nginx
  2. 乱码出现在 页面 / 数据库 / 表单提交
  3. 示例代码或截图

我可以直接帮你定位是哪一步出的问题。

0 踩