必须用三反引号围栏+正确语言标识(如`python)才能触发高亮;不写或拼错语言名将退为纯文本;查支持语言可访问highlightjs.org/demo或运行console.log(hljs.listlanguages());动态插入需转义html实体并手动调用hljs.highlightelement()。

要在 Markdown 文档中正确写出可被解析为代码块的文本,并让不同编程语言的代码在网页中自动高亮显示,必须严格遵循围栏式代码块语法与渲染器协同规则。
基础代码块写法:三反引号 + 语言标识
用三个连续反引号 ``` 开头,紧接着写语言名称(如 javascript、python、html),换行后粘贴代码,最后再用三个反引号 ``` 结尾。
```python
def fib(n):
return n if n print(fib(10))
```
这一步不能省略语言名——【不写语言标识时,大多数渲染器默认当作文本处理,完全不会触发高亮】。空语言(```)或拼错语言名(如 ```pyhton```)会导致 highlight.js 等引擎 fallback 到 plaintext 模式,失去语法着色。
支持的语言怎么查?别靠猜
方法一:直接访问 Highlight.js 官方语言列表页(https://highlightjs.org/static/demo/),左侧导航栏滚动查看全部 174+ 种已注册语言 ID。
方法二:在运行环境中执行 console.log(hljs.listLanguages()),返回数组即当前加载的所有合法语言标识符。
注意:python 是对的,但 Python、PYTHON、py 都无效;java 正确,javscript 是常见拼写错误。
动态内容插入时的 HTML 结构转换
第一步:接收流式 Markdown 字符串,例如来自 SSE 或 GPT API 的响应片段。
第二步:用正则提取所有
...块,替换为标准高亮结构:
...。
第三步:对新插入的 pre > code 元素单独调用 hljs.highlightElement(codeEl),而非依赖全局 highlightAll()。
这一步必须做 HTML 实体转义——【未转义 、& 会导致 DOM 解析中断,后续高亮脚本直接失效】。原始代码中的
常见失败场景与绕过方案
方法1:GitHub Pages 渲染失败 → 检查文件扩展名是否为 .md(不是 .txt),且代码块首行 ``` 后无空格。
方法2:VS Code 预览无高亮 → 打开设置搜索「markdown.preview.languageDetection」,确保设为 true。
方法3:Prism.js 不识别 bash → 在页面中额外引入 prism-bash.min.js,否则只加载了核心模块时 bash 会被忽略。











