第一步:排查文件编码维度——解决基础乱码问题
PHPCMS页面字体乱码大多是文件保存编码与页面声明编码不一致导致的,这是最常见的修复切入点,零技术基础也能操作。
1.1 先确认当前页面实际编码
- 打开出现乱码的PHPCMS页面,按F12打开浏览器开发者工具(360、Edge、Chrome通用)
- 切换到Network(网络)标签,刷新页面,点击第一个加载的HTML文件
- 在右侧Response Headers(响应头)中找到Content-Type,查看编码格式(通常应该是UTF-8)
1.2 再检查PHPCMS核心编码配置
打开你的网站根目录下的配置文件,路径是phpcms/configs/system.php,找到以下两行代码,确保编码设置一致且为UTF-8(GBK是旧版编码,不建议修改旧配置时直接切GBK→UTF-8,会出现数据库乱码):
```php
// 系统字符集
'charset' => 'utf-8',
// 数据库字符集
'database_charset' => 'utf8',
```
注意:旧版PHPCMS V9的GBK版本默认charset和database_charset都是gbk,如果新修改内容或模板引入了UTF-8编码的素材,才会单独出现某块内容的乱码。
1.3 修复模板文件/内容编辑器保存的编码
如果是模板整体乱码,排查模板文件保存编码:
- 用Notepad++(下载地址:https://notepad-plus-plus.org/downloads/)打开出现问题的模板文件(模板路径:phpcms/templates/default/对应的模块/对应的文件夹/xxx.html)
- 点击Notepad++顶部菜单的编码,先选择以UTF-8(无BOM)格式打开(如果旧版GBK版本就选以ANSI格式打开)
- 确认内容显示正常后,再点击编码→转为UTF-8(无BOM)格式(旧版GBK版本就转ANSI)
- 保存后覆盖原来的文件即可
如果是后台发布的单篇内容乱码,排查编辑器设置:
- 登录PHPCMS V9后台,点击设置→站点管理,编辑你的站点
- 找到编辑器字符集选项,确保和system.php的charset一致
- 旧版有问题的内容需要重新在后台编辑:先把后台编辑器切换到源码模式,把乱码内容手动替换成正常的(如果有备份数据库的备份内容更方便),再切换回可视化模式保存
第二步:排查字体加载维度——解决显示不全/错位问题
如果是部分文字变成方块、小方框、乱码混合正确文字,或者文字间距、行距、对齐方式完全不对,大概率是自定义字体加载失败或字体库路径错误。
2.1 检查自定义字体是否引入正确

打开出现问题的模板文件(通常是header.html、footer.html或单独的CSS文件),搜索@font-face,确保引入格式完整:
```css
@font-face {
font-family: 'MyCustomFont'; / 自定义字体名称,要和后面调用的一致 /
src: url('/statics/css/fonts/myfont.eot'); / IE9兼容 /
src: url('/statics/css/fonts/myfont.eot?iefix') format('embedded-opentype'), / IE6-IE8兼容 /
url('/statics/css/fonts/myfont.woff2') format('woff2'), / 现代浏览器首选 /
url('/statics/css/fonts/myfont.woff') format('woff'), / 次选 /
url('/statics/css/fonts/myfont.ttf') format('truetype'), / 移动端兼容 /
url('/statics/css/fonts/myfont.svgMyCustomFont') format('svg'); / 旧版IOS兼容 /
font-weight: normal;
font-style: normal;
}
/ 调用自定义字体 /
body {
font-family: 'MyCustomFont', 'Microsoft YaHei', 'SimSun', sans-serif;
}
```
这里的font-family自定义名称不能带特殊字符,src路径必须用绝对路径(以/开头),如果用相对路径(./或../),可能会在页面跳转层级变化时失效。
2.2 确认字体文件存在且权限正确
用FTP工具(比如FileZilla,下载地址:https://filezilla-project.org/download.php?type=client)或宝塔面板的文件管理:
- 检查@font-face里写的字体文件路径是否真实存在
- 检查字体文件的权限(Windows服务器不需要,Linux服务器必须设为755):右键点击文件→权限→数字输入755→勾选“应用到子目录和文件”(如果是fonts文件夹的话)
2.3 排查字体调用的优先级
如果CSS里设置了多个字体,检查是否有优先级更高的CSS覆盖了正确的字体:
- 按F12打开开发者工具,切换到Elements(元素)标签
- 点击左上角的小箭头,选中出现问题的文字
- 在右侧Computed(计算样式)中找到font-family,查看浏览器实际生效的字体
- 如果生效的不是预期的自定义字体或系统字体(比如SimSun宋体),在右侧Styles(样式)中找到覆盖的CSS,修改或删除即可
第三步:排查数据库字符集维度——解决全站历史内容乱码
如果是升级PHPCMS版本、迁移服务器、修改system.php编码后全站内容乱码,且前两步无法修复,才需要操作数据库(操作前必须100%备份数据库!)。
3.1 用宝塔面板备份数据库
- 登录宝塔面板,点击左侧菜单的数据库
- 找到你的PHPCMS数据库,点击右侧的备份,等待备份完成,备份文件会自动保存在/www/backup/database/目录下
3.2 修复数据库的字符集(仅限GBK→UTF-8整体迁移/升级时操作)
如果是GBK版本迁移到UTF-8版本,按以下步骤操作:
- 打开宝塔面板的phpMyAdmin,选择你的PHPCMS数据库
- 点击顶部菜单的SQL,输入以下代码(把
your_db_name替换成你的数据库名,v9_替换成你的PHPCMS表前缀,默认是v9_):
```sql
-- 修改数据库字符集
ALTER DATABASE `your_db_name` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
-- 修改所有表的字符集(生成批量修改语句)
SELECT CONCAT('ALTER TABLE `', table_name, '` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;') AS modify_table_sql
FROM information_schema.tables
WHERE table_schema = 'your_db_name' AND table_prefix = 'v9_';
```
- 执行完第一条语句后,点击SQL结果中的复制,把所有生成的ALTER TABLE语句复制出来,再单独粘贴到SQL输入框中执行
- 执行完成后,修改system.php的charset和database_charset为
utf-8(注意不是utf8mb4,旧版PHPCMS V9不支持数据库级别的utf8mb4,只支持表级)
- 最后检查后台发布的内容是否正常,如果还有旧版乱码的小部分内容,手动修改即可