百科模块说明(对标百度百科)
版本:v1.0(2026-09-28 新增) 遵循《页面模块创建规范》:无 emoji 图标、封面仅图片 URL、CSRF 全覆盖、输出全转义、SQL 全参数绑定。
一、功能概览
| 能力 | 说明 |
|---|---|
| 词条浏览 | 频道首页(搜索/分类/特色词条/最新最热列表/分页)+ 词条详情页 |
| 词条详情 | 概述框(摘要+封面右浮)、正文、自动目录(h2/h3 锚点,侧边 sticky)、标签、相关词条、编辑历史 |
| 用户贡献 | 登录用户可创建词条(提交后进入待审核);本人可修改自己的待审核/被拒词条并重新提交 |
| 后台管理 | 词条 CRUD、审核(通过/拒绝+拒绝原因)、特色词条标记、分类管理(双 Tab) |
| 编辑历史 | 每次创建/编辑保存正文快照与操作原因,词条页侧栏展示最近 8 条 |
| 入口 | 前台导航「百科」、首页栏目类型 encyclopedia(热门词条区块)、后台侧边栏「内容管理 → 百科管理」 |
二、文件清单
| 文件 | 职责 |
|---|---|
encyclopedia.php | 前台频道首页(搜索 q / 分类 cat / 排序 sort=latest,hot / 分页 page) |
encyclopedia-entry.php | 词条详情页(?id=N;待审核/被拒词条仅本人与管理员可见;已发布词条浏览 +1) |
encyclopedia-edit.php | 前台创建/编辑(requireLogin;普通用户提交进待审核,管理员直接生效) |
admin/encyclopedia.php | 后台管理(tab=entries 词条 / tab=categories 分类;GET 快捷审核与删除均带 CSRF) |
includes/fn-encyclopedia.php | 模块函数库(经 includes/auth.php 统一加载,前后台可用) |
assets/css/encyclopedia.css | 模块样式(文件头含全站统一的 Emoji 禁用规则块) |
index.php | 首页 encyclopedia 栏目分支(热门词条区块) |
admin/homepage-sections.php | 栏目类型注册 'encyclopedia' => '百科词条' |
database.sql | 三张表的 DDL + 默认分类种子(全新安装自动可用) |
三、数据库设计
encyclopedia(词条)
title全站唯一(uk_title);summary概述纯文本;content正文 HTMLcover仅存图片 URL 或 uploads/ 相对路径(isValidEncyclopediaCover()校验)status:0=待审核 1=已发布 2=已拒绝(reject_reason展示给作者)is_featured特色词条(频道首页与首页栏目展示);view_count/edit_count计数
encyclopedia_categories(分类)
name唯一;默认种子:人物/历史/地理/科技/文化/生活/娱乐/体育
encyclopedia_history(编辑历史)
- 每次保存写入
action(create/edit)、reason、content快照
四、安全与内容规范
- 存储型 XSS 防护:正文与摘要入库前统一经
encyclopediaSanitize()白名单净化(管理员提交同样净化)—— 允许常规排版标签;a仅留 href(http/https/站内相对路径,自动加 rel="nofollow");img仅留 src(http(s) 或 uploads/、assets/ 路径)+alt;script/style/iframe/form等连同内容整体删除;未知标签解包留文本。 - 审核流:普通用户任何提交(新建/修改)一律进入待审核;已发布词条前台只读(避免未审核内容上线或公开词条消失),管理员可在后台直接编辑。
- 权限:待审核/被拒词条仅创建者本人与管理员可见(404 对外);后台页 requireAdmin;所有写操作 CSRF 校验。
- 图标/封面:遵守全站 emoji 禁用规则,封面仅接受图片(≤2MB,JPG/PNG/GIF/WebP,等比缩放最长边 800px,存
uploads/encyclopedia/Y/m/)。
五、正文排版约定(编辑器为 HTML 文本域)
<h2>章节标题</h2> <!-- 自动进入右侧目录(锚点 sec-N) -->
<h3>小节标题</h3> <!-- 同上,目录二级缩进 -->
<p>正文段落</p>
<ul><li>列表项</li></ul>
<blockquote>引用</blockquote>
<table><tr><th>表头</th></tr><tr><td>单元格</td></tr></table>
六、已知边界
- 词条重名由唯一索引 + 服务端预检双重拦截,提示直接编辑既有条目。
- 编辑历史仅存正文快照(不含摘要/标签字段),满足追溯主诉求,控制存储成本。
functions.php因混合换行受编辑保护,fn-encyclopedia.php的加载挂在includes/auth.php(前后台唯一公共入口),文件内有注释说明。