论坛出现乱码,通常是因为字符编码不匹配导致的。以下是一套完整的排查和解决方案:
步骤:
登录 MySQL/MariaDB:
mysql -u root -p
检查当前数据库字符集:
SHOW CREATE DATABASE discuz_db; -- 替换为你的数据库名
确保是 utf8mb4 或 utf8(推荐 utf8mb4 支持更多字符)。
utf8mb4
utf8
修改数据库字符集(如果需要):
ALTER DATABASE discuz_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
检查表字符集:
SHOW TABLE STATUS FROM discuz_db;
如果表不是 utf8mb4,需逐表修改:
ALTER TABLE 表名 CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
或使用批量修改脚本(备份后操作)。
配置 Discuz! 数据库连接字符集: 编辑 Discuz! 的配置文件:
sudo nano /var/www/html/discuz/config/config_global.php
查找以下行并修改:
$_config['db']['dbcharset'] = 'utf8mb4'; // 或 'utf8'
find /var/www/html/discuz -name "*.php" -exec file {} \; | grep -v UTF-8
php.ini
default_charset = "utf-8"
config_global.php
$_config['output']['charset'] = 'utf-8';
# Nginx 示例 charset utf-8;
# Apache 示例(.htaccess 或虚拟主机配置) AddDefaultCharset UTF-8
mysqldump
--default-character-set=utf8mb4
locale
确保包含 zh_CN.UTF-8 或 en_US.UTF-8。 如未设置,执行:
zh_CN.UTF-8
en_US.UTF-8
sudo locale-gen zh_CN.UTF-8 sudo update-locale LANG=zh_CN.UTF-8
sudo apt install language-pack-zh-hans # Ubuntu 衍生版
如果急需临时显示正常,可在 Discuz! 的 公共头部模板 中强制指定:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
如果以上步骤仍无法解决,请提供更多细节(如乱码截图、数据库版本、Discuz! 版本),以便进一步排查。