问答模块说明(对标百度知道)
版本:v1.0(2026-09-28 新增) 遵循《页面模块创建规范》:无 emoji 图标、CSRF 全覆盖、输出全转义、SQL 全参数绑定、内容白名单净化。
一、功能概览
| 能力 | 说明 |
|---|---|
| 问答首页 | qa.php:筛选(最新/热门/回答最多/待解决/已解决)、关键词搜索、问题列表(回答数侧栏 + 解决徽标 + 最佳回答摘要)、分页 |
| 问题详情 | qa-question.php?id=N:问题正文、回答列表(采纳答案置顶绿边高亮)、回答表单、采纳/取消采纳、浏览计数 |
| 我要提问 | qa-ask.php:登录用户发布问题(标题 5-200 字 + 补充说明),发布即可见 |
| 采纳机制 | 提问人本人或管理员可采纳最佳答案(一个问题仅一个采纳,切换采纳自动清旧);采纳后问题标记「已解决」 |
| 后台管理 | admin/qa.php 双 Tab:问题管理(屏蔽/恢复/撤采纳/删除连带回答)+ 回答管理(屏蔽/恢复/删除,联动 answer_count 与采纳状态) |
| 首页栏目 | qa 类型「热门问答」:按浏览量取热门问题,行式列表(解决徽标 + 标题 + 回答数/浏览量),带「我要提问」快捷按钮 |
二、互动规则
- 提问/回答/采纳均需登录;不能回答自己提出的问题。
- 提问与回答默认直接发布(status=1),管理员可事后屏蔽(status=2)或删除;屏蔽采纳答案会自动撤销采纳并同步回答数。
- 回答内容至少 5 个字;问题与回答内容入库前统一经
encyclopediaSanitize()白名单净化(与百科/时政模块同一安全标准)。
三、文件清单
| 文件 | 职责 |
|---|---|
qa.php | 问答频道首页(sort/q/page 参数) |
qa-question.php | 问题详情 + 回答 + 采纳(POST 均带 CSRF) |
qa-ask.php | 提问页(requireLogin) |
admin/qa.php | 后台问题/回答管理(GET 快捷操作全部 CSRF) |
includes/fn-qa.php | 模块函数库(经 includes/auth.php 统一加载,与百科/时政同因:functions.php 混合换行受编辑保护) |
assets/css/qa.css | 模块样式(文件头含全站统一 Emoji 禁用规则块) |
index.php | 首页 qa 栏目分支 |
admin/homepage-sections.php | 栏目类型注册 'qa' => '热门问答' |
database.sql | 两张表 DDL(全新安装自动可用) |
四、数据库设计
qa_questions(问题)
title标题(5-200 字);content补充说明(净化后 HTML)user_id提问人;view_count/answer_count计数(answer_count 由代码同步维护)accepted_answer_id已采纳回答(NULL=待解决)status:0=待审核 1=正常 2=已屏蔽(默认 1,后台可事后审核)
qa_answers(回答)
question_id/user_id/content(净化后 HTML)is_accepted采纳标记(与 qa_questions.accepted_answer_id 双向一致,由 acceptQaAnswer/unaccept 及后台操作维护)status同问题
五、入口与运营
- 首页栏目「热门问答」位于「百科词条」正下方(sort_order=11,item_limit=6),后台「首页栏目」可调整条数/标题/排序/停用。
- 前台导航未默认添加「问答」入口(如需,可在后台「导航管理」添加
qa.php,图标留空或用图片 URL)。 - 种子数据:4 个示例问题(2 个已采纳解决)+ 5 条回答,均为站内使用咨询类内容,可直接保留或删除。
六、安全要点
- 问题/回答内容入库前经 HTML 白名单净化(script/iframe/事件属性/javascript: 全剥离,a 加 rel="nofollow")。
- 非正常状态问题仅提问人本人与管理员可见(对外 404)。
- 采纳权限:提问人本人或管理员;服务端校验,前端按钮仅对有权者渲染。
- 删除问题连带删除其全部回答;屏蔽/删除回答自动重算 answer_count 并处理采纳联动。