提问背景 Question:
词条的问题,我已经了解得差不多清楚了。我们回头做,接下来我们要修改一些现实的问题,比如代码高亮,显示出代码块的问题。
百科词条系统与代码高亮优化方案
针对你提到的代码高亮及显示异常问题,这通常是由于前端渲染器与后端解析器对 Markdown 语法(特别是嵌套符号及代码块边界)的解析逻辑差异导致的。为了彻底解决这一痛点,建议采取以下技术路径:
1. 统一解析方案
既然后端已采用 goldmark,建议前端渲染也统一逻辑,或者使用专门针对代码块的 Syntax Highlighter(如 Prism.js 或 Highlight.js)。
- 后端归一化:在入库前通过正则表达式或 AST 钩子(Hook),强制将
**文字**前后的标点或特殊字符进行空格隔离,防止被解析器识别为嵌套语法。 - 前端渲染:确保前端解析器(如 React-Markdown 或 Vue-Markdown)使用的插件版本与后端对齐,特别是对于
CommonMark规范的兼容性设置。
2. 代码块显示优化
- 语法识别:确保代码块开头使用了标准的
```语言类型标注。如果 AI 生成的代码块没有语言后缀,建议在入库处理时通过脚本自动检测或填充默认值(如text或bash)。 - CSS 样式隔离:确保代码块的
pre和code标签具有明确的overflow-x: auto属性,防止长代码行撑破布局。
3. 词条系统架构回顾
你之前确认的 “词条表 + 关联中间表” 方案非常稳健:
- 词条表:负责存储词条本身及其解释。
- 关联表 (content_tags_map):记录
content_id和tag_id的多对多关系。在渲染文章时,后端根据关联表匹配内容中的关键词,并使用占位符替换机制(如[link:词条ID]词条文字[/link]),最后由前端渲染为<a>标签。
这种设计不仅解耦了内容与词条,还方便后续通过异步任务(如 Go 的 Goroutine)去批量扫描旧文章,实现全站的自动化内链更新,且不会造成实时性能压力。