CodeIgniter 中 keywords 自动标签化需手动实现,非框架原生功能;可从标题、标签或正文提取,须清洗去重防 XSS,form_input 等函数不参与生成,入库字段建议 VARCHAR(255) 并限 10 个关键词。

keywords 自动标签化在 CodeIgniter 中不是框架原生功能,得靠你手动提取、清洗、存入数据库或直接注入 。它本质是「内容后处理」,不是路由或模型层的标配能力。
关键词从哪来:标题/标签/正文提取三选一
没有统一标准,取决于你的内容结构和 SEO 策略:
- 用文章
$row->title拆词(简单但泛) - 读取已有的分类/标签字段(如
$row->tags,需逗号或顿号分隔) - 从正文前 500 字做基础分词(需过滤停用词、去重、限制长度)
别直接对整篇长文跑 preg_match_all('/\w{2,}/u', $content, $matches) —— 会抓出大量无意义词,还可能触发内存超限。
form_input() 和 form_textarea() 不参与关键词生成
这两个辅助函数只负责渲染 HTML 表单控件,不解析语义、不调用 NLP 库、也不自动关联关键词逻辑。你看到的「自动标签」效果,一定是:
- 前端 JS 监听输入并调用
/api/suggest_keywords接口(返回 JSON) - 后端控制器里手动拼接
$keywords = implode(',', array_unique($tags)) - 在视图中写死
CodeIgniter 3.x 官方文档里根本没提 keywords 相关 helper 或 library,别被“自动”二字带偏。
关键词入库要防重复、防 XSS、防长度溢出
如果你打算把提取结果存进数据库(比如 posts.keywords 字段),注意三点:
- 字段类型用
VARCHAR(255)足够,别设成TEXT—— 关键词不是正文,过长反而影响索引效率 - 入库前必须过一遍
$this->security->xss_clean(),尤其当来源含用户编辑内容 - 合并关键词时用
array_filter(array_map('trim', explode(',', $input)))去空格、去空项,再array_slice($cleaned, 0, 10)限制最多 10 个
WordPress 那套「取摘要+截前 200 字」的做法可参考,但 CodeIgniter 没内置 get_the_excerpt(),得你自己写逻辑判断 $row->excerpt 是否为空,再 fallback 到 mb_substr($row->content, 0, 200, 'UTF-8')。
真正难的不是怎么写那几行 PHP,而是决定「哪些词值得标」—— 这部分没法自动化,得结合业务定规则。比如电商项目该优先保留型号、品牌、规格;博客则侧重主题词、人物、事件。别指望一个正则包打天下。











