## 📋 项目背景

对 rage.yuekegu.com 考试系统(exam 模块)进行了全面的问题排查和功能修复,涵盖试题展示、试卷管理、打印功能、数据查询等多个方面。

## 🔧 问题修复清单

### 1. HTML 标签显示问题
**症状:** 试题内容中的 HTML 标签(`

`, ``, `` 等)被当作纯文本显示
**原因:** 视图使用 `Html::encode()` 对内容进行了 HTML 转义
**修复:** 改用 `HtmlPurifier::process()`,保留安全 HTML 标签的同时过滤 XSS 攻击

### 2. 图片不显示
**症状:** 试题中的 `` 标签被完全过滤
**原因:** HtmlPurifier 默认安全策略不允许图片标签
**修复:** 配置白名单允许 `img[src|alt|width|height]`

### 3. LaTeX 公式渲染
**症状:** 数学公式($A=\\{x \\in N…$)显示为纯文本
**原因:** 缺少数学公式渲染引擎
**修复:** MathJax → **KaTeX**(更轻更快,使用 CDN 加载)

### 4. 试卷总分显示为 0
**症状:** 试卷详情页显示 “共 0 分”
**原因:** `sq_testpaper` 表无 `total_score` 字段
**修复:** 从 `sq_testpaperinfo` 表动态汇总各题分数

### 5. 题号显示问题
**症状:** 题号不连续、题型未分组、题号与内容分行
**修复:** 全局通排 1-19,题型分组(一、选择题 共8题…),题号与内容同行

### 6. 页面布局优化
**修复:** 左侧题目 + 右侧试卷信息的两栏布局(参考出卷网风格)

### 7. 502 Bad Gateway(testpaper/1991)
**症状:** 试卷页 502 错误
**原因:** TestpaperService 数据键名不匹配,`question_content` → `content`
**修复:** 修正 Service 层数据映射,并从 `sq_question_content` 表补取内容

### 8. 502 Bad Gateway(home.yuekegu.com)
**症状:** 站点 502 错误
**原因:** PHP 版本不兼容导致 Deprecated 警告触发 Yii2 的 HeadersAlreadySentException
**修复:** 在入口文件添加 `error_reporting(E_ALL & ~E_DEPRECATED & ~E_USER_DEPRECATED);`

### 9. SQL 参数绑定错误(HY093)
**症状:** PDOException: Invalid parameter number
**原因:** `Tools::Pagination()` 中 `count()` 调用时分页参数与 SQL 不匹配
**修复:** 修改 Pagination 方法,使用克隆查询分离计数

### 10. 试题详情页缺少 KaTeX
**症状:** 试题详情页公式未渲染
**修复:** 补加 KaTeX CDN 资源加载

### 11. 试卷打印版完善
**修复:** 打印页也支持题型分组、选项横排、图片显示

## 🔧 工具安装

### OpenCode CLI
– 安装命令:`npm i -g opencode-ai`
– 版本:1.18.2
– 集成 DeepSeek API 用于 AI 辅助开发
– 安装 opencode-cli Skill 实现 OpenClaw 与 OpenCode 联动

## 📊 技术栈

| 组件 | 版本 |
|——|——|
| PHP | 8.3 |
| 框架 | RageFrame3 (Yii2) |
| 数据库 | MySQL (yuekegu) |
| 前端 | HTML + KaTeX + CSS |
| 服务器 | Nginx + OpenCloudOS |
| AI | DeepSeek API + OpenCode |

Leave A Comment

Recommended Posts